112 lines
3.3 KiB
Swift
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
|
|
])
|
|
|
|
}
|
|
|
|
}
|