212 lines
8.8 KiB
Swift
212 lines
8.8 KiB
Swift
import AppKit
|
|
|
|
// TODO: Change to appropriate links.
|
|
fileprivate enum AboutLinks {
|
|
// static let website = "https://cmdbar.app"
|
|
// static let documentation = "https://cmdbar.app/documentation"
|
|
// static let privacy = "https://cmdbar.app/#privacy-policy"
|
|
static let author = "https://kolokolnikov.org"
|
|
}
|
|
|
|
enum Strings {
|
|
static let copyright = "Copyright © 2024\nGarikMI. All rights reserved."
|
|
static let evaluationTitle = "License - Evaluation"
|
|
static let evaluationMessage = "You are currently using evaluation license. CmdBar will quit after 20 minutes. If you already own a license, enter it below or purchase a license."
|
|
static let activate = "Activate"
|
|
static let proTitle = "License - Activated"
|
|
static let proMessage = "Thank you for purchasing CmdBar! Enjoy!"
|
|
static let deactivate = "Deactivate"
|
|
static let activating = "Activating..."
|
|
}
|
|
|
|
class AboutViewController: NSViewController, NSTextFieldDelegate {
|
|
private var appIconImage: NSImageView = {
|
|
//let image = NSImageView(image: NSApp.applicationIconImage)
|
|
let image = NSImageView()
|
|
image.image = NSWorkspace.shared.icon(forFile: Bundle.main.bundlePath)
|
|
image.imageScaling = .scaleAxesIndependently
|
|
image.translatesAutoresizingMaskIntoConstraints = false
|
|
return image
|
|
}()
|
|
|
|
private var appNameLabel: NSTextField = {
|
|
let textField = NSTextField()
|
|
textField.stringValue = (Bundle.main.infoDictionary?["CFBundleName"] as? String) ?? "NOT FOUND"
|
|
textField.isEditable = false
|
|
textField.isBezeled = false
|
|
textField.drawsBackground = false
|
|
textField.alignment = .center
|
|
textField.font = NSFont.systemFont(ofSize: NSFontDescriptor .preferredFontDescriptor(forTextStyle: .title1).pointSize, weight: .bold)
|
|
textField.translatesAutoresizingMaskIntoConstraints = false
|
|
return textField
|
|
}()
|
|
|
|
private var versionLabel: NSTextField = {
|
|
let textField = NSTextField()
|
|
textField.stringValue = "Version \((Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? "-.--")"
|
|
textField.isEditable = false
|
|
textField.isBezeled = false
|
|
textField.drawsBackground = false
|
|
textField.alignment = .center
|
|
textField.textColor = NSColor.systemGray
|
|
textField.font = NSFont.systemFont(ofSize: NSFontDescriptor.preferredFontDescriptor(forTextStyle: .subheadline).pointSize, weight: .regular)
|
|
textField.translatesAutoresizingMaskIntoConstraints = false
|
|
return textField
|
|
}()
|
|
|
|
private var copyrightLabel: NSTextField = {
|
|
let textField = NSTextField()
|
|
textField.stringValue = Strings.copyright
|
|
textField.maximumNumberOfLines = 4
|
|
textField.cell?.truncatesLastVisibleLine = true
|
|
textField.isEditable = false
|
|
textField.isBezeled = false
|
|
textField.drawsBackground = false
|
|
textField.alignment = .center
|
|
textField.textColor = NSColor.systemGray
|
|
textField.font = NSFont.systemFont(ofSize: NSFontDescriptor.preferredFontDescriptor(forTextStyle: .subheadline).pointSize, weight: .regular)
|
|
textField.translatesAutoresizingMaskIntoConstraints = false
|
|
return textField
|
|
}()
|
|
|
|
private var authorButton: NSButton = {
|
|
let button = NSButton()
|
|
button.title = "Author"
|
|
button.sizeToFit()
|
|
button.bezelStyle = .rounded
|
|
button.action = #selector(author)
|
|
button.translatesAutoresizingMaskIntoConstraints = false
|
|
return button
|
|
}()
|
|
|
|
// private var privacyButton: NSButton = {
|
|
// let button = NSButton()
|
|
// button.title = "Privacy Policy"
|
|
// button.sizeToFit()
|
|
// button.bezelStyle = .rounded
|
|
// button.action = #selector(privacy)
|
|
// button.translatesAutoresizingMaskIntoConstraints = false
|
|
// return button
|
|
// }()
|
|
|
|
// private var documentationButton: NSButton = {
|
|
// let button = NSButton()
|
|
// button.title = "Docs"
|
|
// button.sizeToFit()
|
|
// button.bezelStyle = .rounded
|
|
// button.action = #selector(documentation)
|
|
// button.translatesAutoresizingMaskIntoConstraints = false
|
|
// return button
|
|
// }()
|
|
//
|
|
// private var websiteButton: NSButton = {
|
|
// let button = NSButton()
|
|
// button.title = "CmdBar.app"
|
|
// button.sizeToFit()
|
|
// button.bezelStyle = .rounded
|
|
// button.action = #selector(website)
|
|
// button.translatesAutoresizingMaskIntoConstraints = false
|
|
// return button
|
|
// }()
|
|
|
|
private var buttonsContainer: NSLayoutGuide = {
|
|
let container = NSLayoutGuide()
|
|
return container
|
|
}()
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
// Program info
|
|
view.addSubview(appIconImage)
|
|
view.addSubview(appNameLabel)
|
|
view.addSubview(versionLabel)
|
|
view.addSubview(copyrightLabel)
|
|
|
|
// Buttons
|
|
view.addLayoutGuide(buttonsContainer)
|
|
// view.addSubview(privacyButton)
|
|
// view.addSubview(documentationButton)
|
|
// view.addSubview(websiteButton)
|
|
view.addSubview(authorButton)
|
|
|
|
setupConstraints()
|
|
}
|
|
|
|
override func viewDidAppear() {
|
|
super.viewDidAppear()
|
|
self.view.window?.center()
|
|
}
|
|
|
|
override func loadView() {
|
|
self.view = NSView()
|
|
}
|
|
|
|
private func setupConstraints() {
|
|
// View.
|
|
NSLayoutConstraint.activate([
|
|
view.widthAnchor.constraint(equalToConstant: 300),
|
|
view.heightAnchor.constraint(lessThanOrEqualToConstant: 500),
|
|
])
|
|
|
|
// App image.
|
|
NSLayoutConstraint.activate([
|
|
appIconImage.widthAnchor.constraint(equalToConstant: 100),
|
|
appIconImage.heightAnchor.constraint(equalTo: appIconImage.widthAnchor, multiplier: 1),
|
|
appIconImage.topAnchor.constraint(equalTo: view.topAnchor, constant: ViewConstants.spacing20),
|
|
appIconImage.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
|
])
|
|
|
|
// Title
|
|
NSLayoutConstraint.activate([
|
|
appNameLabel.topAnchor.constraint(equalTo: appIconImage.bottomAnchor, constant: ViewConstants.spacing20),
|
|
appNameLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
|
|
|
versionLabel.topAnchor.constraint(equalTo: appNameLabel.bottomAnchor, constant: ViewConstants.spacing2),
|
|
versionLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
|
|
|
copyrightLabel.topAnchor.constraint(equalTo: versionLabel.bottomAnchor, constant: ViewConstants.spacing10),
|
|
copyrightLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
|
])
|
|
|
|
// Buttons
|
|
NSLayoutConstraint.activate([
|
|
buttonsContainer.topAnchor .constraint(equalTo: copyrightLabel.bottomAnchor, constant: ViewConstants.spacing20),
|
|
buttonsContainer.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -ViewConstants.spacing20),
|
|
buttonsContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
|
|
|
authorButton.topAnchor.constraint(equalTo: buttonsContainer.topAnchor),
|
|
authorButton.bottomAnchor.constraint(equalTo: buttonsContainer.bottomAnchor),
|
|
authorButton.leadingAnchor.constraint(equalTo: buttonsContainer.leadingAnchor),
|
|
authorButton.trailingAnchor.constraint(equalTo: buttonsContainer.trailingAnchor),
|
|
|
|
// privacyButton.topAnchor.constraint(equalTo: buttonsContainer.topAnchor),
|
|
// privacyButton.bottomAnchor.constraint(equalTo: buttonsContainer.bottomAnchor),
|
|
// privacyButton.leadingAnchor.constraint(equalTo: buttonsContainer.leadingAnchor),
|
|
//
|
|
// documentationButton.firstBaselineAnchor.constraint(equalTo: privacyButton.firstBaselineAnchor),
|
|
// documentationButton.leadingAnchor.constraint(equalTo: privacyButton.trailingAnchor,constant: ViewConstants.spacing10),
|
|
//
|
|
// websiteButton.firstBaselineAnchor.constraint(equalTo: privacyButton.firstBaselineAnchor),
|
|
// websiteButton.leadingAnchor.constraint(equalTo: documentationButton.trailingAnchor,constant: ViewConstants.spacing10),
|
|
// websiteButton.trailingAnchor.constraint(equalTo: buttonsContainer.trailingAnchor),
|
|
])
|
|
}
|
|
|
|
@objc private func author() {
|
|
NSWorkspace.shared.open(URL(string: AboutLinks.author)!)
|
|
}
|
|
|
|
// @objc private func privacy() {
|
|
// NSWorkspace.shared.open(URL(string: AboutLinks.privacy)!)
|
|
// }
|
|
//
|
|
// @objc private func documentation() {
|
|
// NSWorkspace.shared.open(URL(string: AboutLinks.documentation)!)
|
|
// }
|
|
//
|
|
// @objc private func website() {
|
|
// NSWorkspace.shared.open(URL(string: AboutLinks.website)!)
|
|
// }
|
|
}
|