From f7eb49e5de82484122d9f8847eab275ad555dfbc Mon Sep 17 00:00:00 2001 From: Serg Date: Sat, 12 May 2018 11:41:13 +0700 Subject: [PATCH] public tap/longtap button action hanglers --- MTMR/AppleScriptTouchBarItem.swift | 4 ++-- MTMR/CustomButtonTouchBarItem.swift | 8 +++---- MTMR/TouchBarController.swift | 30 +++++++++++++++------------ MTMR/Widgets/BatteryBarItem.swift | 4 ++-- MTMR/Widgets/CurrencyBarItem.swift | 4 ++-- MTMR/Widgets/InputSourceBarItem.swift | 4 ++-- MTMR/Widgets/TimeTouchBarItem.swift | 5 ++--- MTMR/Widgets/WeatherBarItem.swift | 4 ++-- 8 files changed, 32 insertions(+), 31 deletions(-) diff --git a/MTMR/AppleScriptTouchBarItem.swift b/MTMR/AppleScriptTouchBarItem.swift index 9659a9b..a0bba70 100644 --- a/MTMR/AppleScriptTouchBarItem.swift +++ b/MTMR/AppleScriptTouchBarItem.swift @@ -5,9 +5,9 @@ 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" diff --git a/MTMR/CustomButtonTouchBarItem.swift b/MTMR/CustomButtonTouchBarItem.swift index 09f5eb8..b1b91d6 100644 --- a/MTMR/CustomButtonTouchBarItem.swift +++ b/MTMR/CustomButtonTouchBarItem.swift @@ -9,16 +9,14 @@ import Cocoa class CustomButtonTouchBarItem: NSCustomTouchBarItem, NSGestureRecognizerDelegate { - private let tapClosure: (() -> ())? - private let longTapClosure: (() -> ())? + var tapClosure: (() -> ())? + var longTapClosure: (() -> ())? private(set) var button: NSButton! //todo hide completely 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) diff --git a/MTMR/TouchBarController.swift b/MTMR/TouchBarController.swift index f4cea6b..0c860a4 100644 --- a/MTMR/TouchBarController.swift +++ b/MTMR/TouchBarController.swift @@ -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 } @@ -241,7 +245,7 @@ class TouchBarController: NSObject, NSTouchBarDelegate { return barItem } - func action(forItem item: BarItemDefinition) -> ()->() { + func action(forItem item: BarItemDefinition) -> (()->())? { switch item.action { case .hidKey(keycode: let keycode): return { HIDPostAuxKey(keycode) } @@ -279,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) } @@ -322,7 +326,7 @@ class TouchBarController: NSObject, NSTouchBarDelegate { case .custom(closure: let closure): return closure case .none: - return {} + return nil } } } diff --git a/MTMR/Widgets/BatteryBarItem.swift b/MTMR/Widgets/BatteryBarItem.swift index 02cd2c7..008813a 100644 --- a/MTMR/Widgets/BatteryBarItem.swift +++ b/MTMR/Widgets/BatteryBarItem.swift @@ -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() diff --git a/MTMR/Widgets/CurrencyBarItem.swift b/MTMR/Widgets/CurrencyBarItem.swift index eddff4f..6980ddb 100644 --- a/MTMR/Widgets/CurrencyBarItem.swift +++ b/MTMR/Widgets/CurrencyBarItem.swift @@ -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,7 +48,7 @@ class CurrencyBarItem: CustomButtonTouchBarItem { self.prefix = from } - super.init(identifier: identifier, title: "⏳", onTap: onTap, onLongTap: onLongTap) + super.init(identifier: identifier, title: "⏳") self.view = button diff --git a/MTMR/Widgets/InputSourceBarItem.swift b/MTMR/Widgets/InputSourceBarItem.swift index be809c8..98f39c7 100644 --- a/MTMR/Widgets/InputSourceBarItem.swift +++ b/MTMR/Widgets/InputSourceBarItem.swift @@ -13,9 +13,9 @@ 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() diff --git a/MTMR/Widgets/TimeTouchBarItem.swift b/MTMR/Widgets/TimeTouchBarItem.swift index 5785c52..882039f 100644 --- a/MTMR/Widgets/TimeTouchBarItem.swift +++ b/MTMR/Widgets/TimeTouchBarItem.swift @@ -3,11 +3,10 @@ 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 diff --git a/MTMR/Widgets/WeatherBarItem.swift b/MTMR/Widgets/WeatherBarItem.swift index 257febc..1440b15 100644 --- a/MTMR/Widgets/WeatherBarItem.swift +++ b/MTMR/Widgets/WeatherBarItem.swift @@ -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,7 +42,7 @@ class WeatherBarItem: CustomButtonTouchBarItem, CLLocationManagerDelegate { iconsSource = iconsText } - super.init(identifier: identifier, title: "⏳", onTap: onTap, onLongTap: onLongTap) + super.init(identifier: identifier, title: "⏳") self.view = button