mirror of
https://github.com/Toxblh/MTMR.git
synced 2026-01-10 17:08:39 +00:00
Merge pull request #76 from ReDetection/hide-button
Code cleanup; Hide button property
This commit is contained in:
commit
3c072923d2
@ -5,16 +5,16 @@ class AppleScriptTouchBarItem: CustomButtonTouchBarItem {
|
||||
private let interval: TimeInterval
|
||||
private var forceHideConstraint: NSLayoutConstraint!
|
||||
|
||||
init?(identifier: NSTouchBarItem.Identifier, source: SourceProtocol, interval: TimeInterval, onTap: @escaping ()->(), onLongTap: @escaping ()->()) {
|
||||
init?(identifier: NSTouchBarItem.Identifier, source: SourceProtocol, interval: TimeInterval) {
|
||||
self.interval = interval
|
||||
super.init(identifier: identifier, title: "⏳", onTap: onTap, onLongTap: onLongTap)
|
||||
super.init(identifier: identifier, title: "⏳")
|
||||
self.forceHideConstraint = self.view.widthAnchor.constraint(equalToConstant: 0)
|
||||
guard let script = source.appleScript else {
|
||||
self.title = "no script"
|
||||
return
|
||||
}
|
||||
self.script = script
|
||||
button.bezelColor = .clear
|
||||
self.isBordered = false
|
||||
DispatchQueue.main.async {
|
||||
var error: NSDictionary?
|
||||
guard script.compileAndReturnError(&error) else {
|
||||
|
||||
@ -9,16 +9,14 @@
|
||||
import Cocoa
|
||||
|
||||
class CustomButtonTouchBarItem: NSCustomTouchBarItem, NSGestureRecognizerDelegate {
|
||||
private let tapClosure: (() -> ())?
|
||||
private let longTapClosure: (() -> ())?
|
||||
private(set) var button: NSButton! //todo hide completely
|
||||
var tapClosure: (() -> ())?
|
||||
var longTapClosure: (() -> ())?
|
||||
private var button: NSButton!
|
||||
|
||||
private var singleClick: NSClickGestureRecognizer!
|
||||
private var longClick: NSPressGestureRecognizer!
|
||||
|
||||
init(identifier: NSTouchBarItem.Identifier, title: String, onTap callback: @escaping () -> (), onLongTap callbackLong: @escaping () -> (), bezelColor: NSColor? = .clear) {
|
||||
self.tapClosure = callback
|
||||
self.longTapClosure = callbackLong
|
||||
init(identifier: NSTouchBarItem.Identifier, title: String) {
|
||||
self.attributedTitle = title.defaultTouchbarAttributedString
|
||||
|
||||
super.init(identifier: identifier)
|
||||
@ -63,10 +61,17 @@ class CustomButtonTouchBarItem: NSCustomTouchBarItem, NSGestureRecognizerDelegat
|
||||
|
||||
var attributedTitle: NSAttributedString {
|
||||
didSet {
|
||||
self.button?.imagePosition = attributedTitle.length > 0 ? .imageLeading : .imageOnly
|
||||
self.button?.attributedTitle = attributedTitle
|
||||
}
|
||||
}
|
||||
|
||||
var image: NSImage? {
|
||||
didSet {
|
||||
button.image = image
|
||||
}
|
||||
}
|
||||
|
||||
private func reinstallButton() {
|
||||
let title = button.attributedTitle
|
||||
let image = button.image
|
||||
@ -80,7 +85,10 @@ class CustomButtonTouchBarItem: NSCustomTouchBarItem, NSGestureRecognizerDelegat
|
||||
button.isBordered = isBordered
|
||||
button.bezelStyle = isBordered ? .rounded : .inline
|
||||
}
|
||||
button.imageScaling = .scaleProportionallyDown
|
||||
button.imageHugsTitle = true
|
||||
button.attributedTitle = title
|
||||
self.button?.imagePosition = title.length > 0 ? .imageLeading : .imageOnly
|
||||
button.image = image
|
||||
self.view = button
|
||||
|
||||
|
||||
@ -10,7 +10,6 @@ class ScrollViewItem: NSCustomTouchBarItem {
|
||||
stackView.orientation = .horizontal
|
||||
let scrollView = NSScrollView(frame: CGRect(origin: .zero, size: stackView.fittingSize))
|
||||
scrollView.documentView = stackView
|
||||
// scrollView.documentView?.bounds.origin = CGPoint(x: 0.0, y: -2.5)
|
||||
self.view = scrollView
|
||||
}
|
||||
|
||||
|
||||
@ -191,19 +191,17 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
}
|
||||
|
||||
func createItem(forIdentifier identifier: NSTouchBarItem.Identifier, definition item: BarItemDefinition) -> NSTouchBarItem? {
|
||||
let action = self.action(forItem: item)
|
||||
let longAction = self.longAction(forItem: item)
|
||||
|
||||
var barItem: NSTouchBarItem!
|
||||
switch item.type {
|
||||
case .staticButton(title: let title):
|
||||
barItem = CustomButtonTouchBarItem(identifier: identifier, title: title, onTap: action, onLongTap: longAction, bezelColor: NSColor.controlColor)
|
||||
barItem = CustomButtonTouchBarItem(identifier: identifier, title: title)
|
||||
case .appleScriptTitledButton(source: let source, refreshInterval: let interval):
|
||||
barItem = AppleScriptTouchBarItem(identifier: identifier, source: source, interval: interval, onTap: action, onLongTap: longAction)
|
||||
barItem = AppleScriptTouchBarItem(identifier: identifier, source: source, interval: interval)
|
||||
case .timeButton(formatTemplate: let template):
|
||||
barItem = TimeTouchBarItem(identifier: identifier, formatTemplate: template, onTap: action, onLongTap: longAction)
|
||||
barItem = TimeTouchBarItem(identifier: identifier, formatTemplate: template)
|
||||
case .battery():
|
||||
barItem = BatteryBarItem(identifier: identifier, onTap: action, onLongTap: longAction)
|
||||
barItem = BatteryBarItem(identifier: identifier)
|
||||
case .dock:
|
||||
barItem = AppScrubberTouchBarItem(identifier: identifier)
|
||||
case .volume:
|
||||
@ -219,13 +217,19 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
barItem = BrightnessViewController(identifier: identifier, refreshInterval: interval)
|
||||
}
|
||||
case .weather(interval: let interval, units: let units, api_key: let api_key, icon_type: let icon_type):
|
||||
barItem = WeatherBarItem(identifier: identifier, interval: interval, units: units, api_key: api_key, icon_type: icon_type, onTap: action, onLongTap: longAction)
|
||||
barItem = WeatherBarItem(identifier: identifier, interval: interval, units: units, api_key: api_key, icon_type: icon_type)
|
||||
case .currency(interval: let interval, from: let from, to: let to):
|
||||
barItem = CurrencyBarItem(identifier: identifier, interval: interval, from: from, to: to, onTap: action, onLongTap: longAction)
|
||||
barItem = CurrencyBarItem(identifier: identifier, interval: interval, from: from, to: to)
|
||||
case .inputsource():
|
||||
barItem = InputSourceBarItem(identifier: identifier, onTap: action, onLongTap: longAction)
|
||||
barItem = InputSourceBarItem(identifier: identifier)
|
||||
}
|
||||
|
||||
if let action = self.action(forItem: item), let item = barItem as? CustomButtonTouchBarItem {
|
||||
item.tapClosure = action
|
||||
}
|
||||
if let longAction = self.longAction(forItem: item), let item = barItem as? CustomButtonTouchBarItem {
|
||||
item.longTapClosure = longAction
|
||||
}
|
||||
if case .bordered(let bordered)? = item.additionalParameters[.bordered], let item = barItem as? CustomButtonTouchBarItem {
|
||||
item.isBordered = bordered
|
||||
}
|
||||
@ -236,21 +240,12 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
widthBarItem.setWidth(value: value)
|
||||
}
|
||||
if case .image(let source)? = item.additionalParameters[.image], let item = barItem as? CustomButtonTouchBarItem {
|
||||
let button = item.button!
|
||||
button.imageScaling = .scaleProportionallyDown
|
||||
button.imagePosition = .imageLeading
|
||||
|
||||
if (item.title == "") {
|
||||
button.imagePosition = .imageOnly
|
||||
}
|
||||
|
||||
button.imageHugsTitle = true
|
||||
button.image = source.image
|
||||
item.image = source.image
|
||||
}
|
||||
return barItem
|
||||
}
|
||||
|
||||
func action(forItem item: BarItemDefinition) -> ()->() {
|
||||
func action(forItem item: BarItemDefinition) -> (()->())? {
|
||||
switch item.action {
|
||||
case .hidKey(keycode: let keycode):
|
||||
return { HIDPostAuxKey(keycode) }
|
||||
@ -288,12 +283,12 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
case .custom(closure: let closure):
|
||||
return closure
|
||||
case .none:
|
||||
return {}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func longAction(forItem item: BarItemDefinition) -> ()->() {
|
||||
func longAction(forItem item: BarItemDefinition) -> (()->())? {
|
||||
switch item.longAction {
|
||||
case .hidKey(keycode: let keycode):
|
||||
return { HIDPostAuxKey(keycode) }
|
||||
@ -331,7 +326,7 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
|
||||
case .custom(closure: let closure):
|
||||
return closure
|
||||
case .none:
|
||||
return {}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,8 +12,8 @@ import Foundation
|
||||
class BatteryBarItem: CustomButtonTouchBarItem {
|
||||
private let batteryInfo = BatteryInfo()
|
||||
|
||||
init(identifier: NSTouchBarItem.Identifier, onTap: @escaping () -> (), onLongTap: @escaping () -> ()) {
|
||||
super.init(identifier: identifier, title: " ", onTap: onTap, onLongTap: onLongTap)
|
||||
init(identifier: NSTouchBarItem.Identifier) {
|
||||
super.init(identifier: identifier, title: " ")
|
||||
|
||||
batteryInfo.start { [weak self] in
|
||||
self?.refresh()
|
||||
|
||||
@ -36,7 +36,7 @@ class CurrencyBarItem: CustomButtonTouchBarItem {
|
||||
"ETH": "Ξ",
|
||||
]
|
||||
|
||||
init(identifier: NSTouchBarItem.Identifier, interval: TimeInterval, from: String, to: String, onTap: @escaping () -> (), onLongTap: @escaping () -> ()) {
|
||||
init(identifier: NSTouchBarItem.Identifier, interval: TimeInterval, from: String, to: String) {
|
||||
activity = NSBackgroundActivityScheduler(identifier: "\(identifier.rawValue).updatecheck")
|
||||
activity.interval = interval
|
||||
self.from = from
|
||||
@ -48,9 +48,7 @@ class CurrencyBarItem: CustomButtonTouchBarItem {
|
||||
self.prefix = from
|
||||
}
|
||||
|
||||
super.init(identifier: identifier, title: "⏳", onTap: onTap, onLongTap: onLongTap)
|
||||
|
||||
self.view = button
|
||||
super.init(identifier: identifier, title: "⏳")
|
||||
|
||||
activity.repeats = true
|
||||
activity.qualityOfService = .utility
|
||||
|
||||
@ -13,18 +13,15 @@ class InputSourceBarItem: CustomButtonTouchBarItem {
|
||||
fileprivate var notificationCenter: CFNotificationCenter
|
||||
let buttonSize = NSSize(width: 21, height: 21)
|
||||
|
||||
init(identifier: NSTouchBarItem.Identifier, onTap: @escaping () -> (), onLongTap: @escaping () -> ()) {
|
||||
init(identifier: NSTouchBarItem.Identifier) {
|
||||
notificationCenter = CFNotificationCenterGetDistributedCenter();
|
||||
super.init(identifier: identifier, title: "⏳", onTap: onTap, onLongTap: onLongTap)
|
||||
super.init(identifier: identifier, title: "⏳")
|
||||
|
||||
observeIputSourceChangedNotification();
|
||||
textInputSourceDidChange()
|
||||
|
||||
self.button.cell?.action = #selector(switchInputSource)
|
||||
self.button.action = #selector(switchInputSource)
|
||||
|
||||
self.button.frame.size = buttonSize
|
||||
self.button.bounds.size = buttonSize
|
||||
self.tapClosure = { [weak self] in
|
||||
self?.switchInputSource()
|
||||
}
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
@ -35,29 +32,21 @@ class InputSourceBarItem: CustomButtonTouchBarItem {
|
||||
CFNotificationCenterRemoveEveryObserver(notificationCenter, UnsafeRawPointer(Unmanaged.passUnretained(self).toOpaque()));
|
||||
}
|
||||
|
||||
@objc override func handleGestureSingle(gr: NSClickGestureRecognizer) {
|
||||
super.handleGestureSingle(gr: gr)
|
||||
switchInputSource()
|
||||
}
|
||||
|
||||
@objc public func textInputSourceDidChange() {
|
||||
let currentSource = TISCopyCurrentKeyboardInputSource().takeUnretainedValue()
|
||||
|
||||
var iconImage: NSImage? = nil
|
||||
|
||||
if let imageURL = currentSource.iconImageURL {
|
||||
if let image = NSImage(contentsOf: imageURL) {
|
||||
iconImage = image
|
||||
}
|
||||
}
|
||||
|
||||
if iconImage == nil, let iconRef = currentSource.iconRef {
|
||||
if let imageURL = currentSource.iconImageURL,
|
||||
let image = NSImage(contentsOf: imageURL) {
|
||||
iconImage = image
|
||||
} else if let iconRef = currentSource.iconRef {
|
||||
iconImage = NSImage(iconRef: iconRef)
|
||||
}
|
||||
|
||||
if (iconImage != nil) {
|
||||
self.button.cell?.image = iconImage
|
||||
self.button.cell?.image?.size = buttonSize
|
||||
if let iconImage = iconImage {
|
||||
iconImage.size = buttonSize
|
||||
self.image = iconImage
|
||||
self.title = ""
|
||||
} else {
|
||||
self.title = currentSource.name
|
||||
|
||||
@ -3,14 +3,12 @@ import Cocoa
|
||||
class TimeTouchBarItem: CustomButtonTouchBarItem {
|
||||
private let dateFormatter = DateFormatter()
|
||||
private var timer: Timer!
|
||||
// private let button = NSButton(title: "", target: nil, action: nil)
|
||||
|
||||
init(identifier: NSTouchBarItem.Identifier, formatTemplate: String, onTap: @escaping () -> (), onLongTap: @escaping () -> ()) {
|
||||
init(identifier: NSTouchBarItem.Identifier, formatTemplate: String) {
|
||||
dateFormatter.setLocalizedDateFormatFromTemplate(formatTemplate)
|
||||
super.init(identifier: identifier, title: " ", onTap: onTap, onLongTap: onLongTap)
|
||||
super.init(identifier: identifier, title: " ")
|
||||
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
|
||||
self.view = button
|
||||
button.bezelColor = .clear
|
||||
self.isBordered = false
|
||||
updateTime()
|
||||
}
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ class WeatherBarItem: CustomButtonTouchBarItem, CLLocationManagerDelegate {
|
||||
|
||||
private var manager:CLLocationManager!
|
||||
|
||||
init(identifier: NSTouchBarItem.Identifier, interval: TimeInterval, units: String, api_key: String, icon_type: String? = "text", onTap: @escaping () -> (), onLongTap: @escaping () -> ()) {
|
||||
init(identifier: NSTouchBarItem.Identifier, interval: TimeInterval, units: String, api_key: String, icon_type: String? = "text") {
|
||||
activity = NSBackgroundActivityScheduler(identifier: "\(identifier.rawValue).updatecheck")
|
||||
activity.interval = interval
|
||||
self.units = units
|
||||
@ -42,9 +42,7 @@ class WeatherBarItem: CustomButtonTouchBarItem, CLLocationManagerDelegate {
|
||||
iconsSource = iconsText
|
||||
}
|
||||
|
||||
super.init(identifier: identifier, title: "⏳", onTap: onTap, onLongTap: onLongTap)
|
||||
|
||||
self.view = button
|
||||
super.init(identifier: identifier, title: "⏳")
|
||||
|
||||
let status = CLLocationManager.authorizationStatus()
|
||||
if status == .restricted || status == .denied {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user