Files

92 lines
2.7 KiB
Swift

//
// ApplicationView.swift
// PrivadoVPN
//
// Created by Juraldinio on 1/26/21.
// Copyright © 2021 Privado LLC. All rights reserved.
//
import Foundation
import AppKit
final class ApplicationView: NSView {
private enum Constants {
enum Geometry {
static let barEmptyHeight: CGFloat = 0
static let barHeight: CGFloat = 50
}
}
private var navigationBarHeightAnchor: NSLayoutConstraint?
// MARK: - JSNavigationControllerViewDelegate
var barView: NSView
var contentView: NSView
var leadingConstraint: NSLayoutConstraint?
// MARK: - Initializers
override init(frame frameRect: NSRect) {
self.barView = NSView()
self.contentView = NSView()
super.init(frame: frameRect)
self.viewBackgroundColor = NSColor(red: 30, green: 41, blue: 80)
self.createUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Private
private func createUI() {
self.translatesAutoresizingMaskIntoConstraints = false
self.barView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(self.barView)
self.contentView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(self.contentView)
let heightLayout = self.barView.heightAnchor.constraint(equalToConstant: 0)
self.navigationBarHeightAnchor = heightLayout
let leadingConstraint = self.contentView.leadingAnchor.constraint(equalTo: self.leadingAnchor)
self.leadingConstraint = leadingConstraint
NSLayoutConstraint.activate([
heightLayout,
self.barView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
self.barView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
self.barView.topAnchor.constraint(equalTo: self.topAnchor),
//
leadingConstraint,
self.contentView.topAnchor.constraint(equalTo: self.barView.bottomAnchor),
self.contentView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
self.contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor)
])
}
}
// MARK: - JSNavigationControllerViewDelegate
extension ApplicationView: JSNavigationControllerViewDelegate {
var navigationBarView: NSView? { self.barView }
func hasNavigationBar(_ hasBar: Bool) {
guard let heightLayout = self.navigationBarHeightAnchor else { return }
heightLayout.constant = hasBar ? Constants.Geometry.barHeight : Constants.Geometry.barEmptyHeight
}
}