Files
2021-08-27 08:34:50 +00:00

112 lines
3.3 KiB
Swift

//
// 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
])
}
}