NetNewsWire/Multiplatform/macOS/Article/WebStatusBarView.swift

102 lines
2.0 KiB
Swift

//
// WebStatusBarView.swift
// Multiplatform macOS
//
// Created by Maurice Parker on 7/8/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import AppKit
import Articles
final class WebStatusBarView: NSView {
var urlLabel = NSTextField(labelWithString: "")
var mouseoverLink: String? {
didSet {
updateLinkForDisplay()
}
}
private var linkForDisplay: String? {
didSet {
needsLayout = true
if let link = linkForDisplay {
urlLabel.stringValue = link
self.isHidden = false
}
else {
urlLabel.stringValue = ""
self.isHidden = true
}
}
}
private var didConfigureLayerRadius = false
override var isOpaque: Bool {
return false
}
override var isFlipped: Bool {
return true
}
override var wantsUpdateLayer: Bool {
return true
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
override func updateLayer() {
guard let layer = layer else {
return
}
if !didConfigureLayerRadius {
layer.cornerRadius = 4.0
didConfigureLayerRadius = true
}
layer.backgroundColor = AppAssets.webStatusBarBackground.cgColor
}
}
// MARK: - Private
private extension WebStatusBarView {
func commonInit() {
self.isHidden = true
urlLabel.translatesAutoresizingMaskIntoConstraints = false
urlLabel.lineBreakMode = .byTruncatingMiddle
urlLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
addSubview(urlLabel)
NSLayoutConstraint.activate([
leadingAnchor.constraint(equalTo: urlLabel.leadingAnchor, constant: -6),
trailingAnchor.constraint(equalTo: urlLabel.trailingAnchor, constant: 6),
centerYAnchor.constraint(equalTo: urlLabel.centerYAnchor)
])
}
func updateLinkForDisplay() {
if let mouseoverLink = mouseoverLink, !mouseoverLink.isEmpty {
linkForDisplay = mouseoverLink.strippingHTTPOrHTTPSScheme
}
else {
linkForDisplay = nil
}
}
}