// // ProgressView.swift // PrivadoVPN // // Created by Juraldinio on 2/4/21. // Copyright © 2021 Privado LLC. All rights reserved. // import Foundation import AppKit final class ProgressView: View { private var progressView: NSView? private var remainingField: NSTextField? private var widthConstraint: NSLayoutConstraint? // MARK: - Interface var progressColor: NSColor = .clear { didSet { self.progressView?.viewBackgroundColor = self.progressColor } } var progress: CGFloat = 0.0 { didSet { guard self.progress >= 0 && self.progress <= 1.0 else { return } if let constraint = self.widthConstraint { NSLayoutConstraint.deactivate([constraint]) } guard let progressView = self.progressView else { return } let widthConstraint = progressView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: self.progress) self.widthConstraint = widthConstraint NSLayoutConstraint.activate([widthConstraint]) } } var textFont: NSFont? { didSet { self.remainingField?.font = self.textFont } } var text: String = "" { didSet { self.remainingField?.stringValue = self.text } } var textColor: NSColor = .clear { didSet { self.remainingField?.textColor = self.textColor } } // MARK: - Lifecycle override func addSubviews() { let view = NSView() self.progressView = view self.addSubview(view) let textField = NSTextField() textField.isBezeled = false textField.drawsBackground = false textField.isEditable = false textField.isSelectable = false textField.translatesAutoresizingMaskIntoConstraints = false textField.focusRingType = .none textField.alignment = .center self.remainingField = textField self.addSubview(textField) } override func addConstraints() { self.translatesAutoresizingMaskIntoConstraints = false guard let progressView = self.progressView , let remainingField = remainingField else { return } progressView.translatesAutoresizingMaskIntoConstraints = false remainingField.translatesAutoresizingMaskIntoConstraints = false let widthConstraint = progressView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.0) self.widthConstraint = widthConstraint NSLayoutConstraint.activate([ remainingField.centerYAnchor.constraint(equalTo: self.centerYAnchor), remainingField.leadingAnchor.constraint(equalTo: self.leadingAnchor), remainingField.trailingAnchor.constraint(equalTo: self.trailingAnchor), // remainingField.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.8), // progressView.leadingAnchor.constraint(equalTo: self.leadingAnchor), progressView.topAnchor.constraint(equalTo: self.topAnchor), progressView.bottomAnchor.constraint(equalTo: self.bottomAnchor), widthConstraint ]) } }