@@ -10,94 +10,156 @@ import Cocoa
1010import ShortcutsKit
1111import ShadowstarKit
1212
13+ struct HotkeyIdentifiers {
14+ static let displayDesktop = " displayDesktop "
15+ static let hideDesktopIcons = " hideDesktopIcons "
16+ static let turnOffDisplay = " turnOffDisplay "
17+ static let turnOnDarkMode = " turnOnDarkMode "
18+ static let sleepMac = " sleepMac "
19+ static let enterScreensaver = " enterScreensaver "
20+ static let preventSleep = " enterScreensaver "
21+ static let disableMouseCursor = " disableMouseCursor "
22+ }
23+
1324class HAFHotkeyManager : NSObject {
1425 static let sharedManager = HAFHotkeyManager ( )
1526
27+ var preDefinedHotkeys : Array < ( String , SCHotkey ) > = Array . init ( )
28+ var userDefinedHotkeys : Array < ( String , SCHotkey ) > = Array . init ( )
1629 private var displayDesktopHotkey : SCHotkey ?
1730 private var hideDesktopIconsHotkey : SCHotkey ?
1831 private var turnOffDisplayHotkey : SCHotkey ?
1932 private var turnOnDarkModeHotkey : SCHotkey ?
33+ private var sleepMacHotkey : SCHotkey ?
34+ private var enterScreensaverHotkey : SCHotkey ?
35+ private var preventSleepHotkey : SCHotkey ?
36+ private var disableMouseCursorHotkey : SCHotkey ?
2037
21- func registerAll( ) -> Void {
22- setDisplayDesktopHotkey ( keyCombo: HAFConfigureManager . sharedManager. displayDesktopKeyCombo ( ) )
23- setHideDesktopIconsHotkey ( keyCombo: HAFConfigureManager . sharedManager. hideDesktopIconsKeyCombo ( ) )
24- setTurnOffDisplayHotkey ( keyCombo: HAFConfigureManager . sharedManager. turnOffDisplayKeyCombo ( ) )
25- setTurnOnDarkModeHotkey ( keyCombo: HAFConfigureManager . sharedManager. turnOnDarkModeKeyCombo ( ) )
38+ override init ( ) {
39+ super. init ( )
40+ __initializePredefinedHotkeys ( )
41+ __initializeUserDefinedHotkeys ( )
2642 }
2743
28- func unregisterAll( ) -> Void {
29- if nil != displayDesktopHotkey{
30- displayDesktopHotkey!. unregister ( )
31- }
32- if nil != hideDesktopIconsHotkey{
33- hideDesktopIconsHotkey!. unregister ( )
34- }
35- if nil != turnOffDisplayHotkey{
36- turnOffDisplayHotkey!. unregister ( )
37- }
38- if nil != turnOnDarkModeHotkey{
39- turnOnDarkModeHotkey!. unregister ( )
44+ func hotkeyForIdentifier( identifier: String ! ) -> SCHotkey ? {
45+ var hotkey : SCHotkey ? = nil
46+ for k in preDefinedHotkeys {
47+ if k. 1 . identifier == identifier{
48+ hotkey = k. 1
49+ break
50+ }
4051 }
52+ return hotkey
4153 }
4254
43- //Display desktop hotkey
44- func setDisplayDesktopHotkey( keyCombo: SCKeyCombo ? ) -> Void {
45- if nil != displayDesktopHotkey{
46- displayDesktopHotkey!. unregister ( )
47- }
48- if nil != keyCombo {
49- displayDesktopHotkey = SCHotkey . init ( keyCombo: keyCombo!, identifier: " displayDesktop " , handler: { ( _) in
50- SSDesktopManager . shared ( ) . showDesktop ( false )
51- } ) ;
52- displayDesktopHotkey!. register ( )
55+ func addHotkeyForPath( path: String ! ) -> SCHotkey ? {
56+ var array = HAFConfigureManager . sharedManager. userDefinedHotkeyPaths ( )
57+ if nil == array {
58+ array = Array< String> . init( )
5359 }
54- HAFConfigureManager . sharedManager. setDisplayDesktopKeyCombo ( keyCombo: keyCombo)
55- }
56-
57- //Hide desktop icons hotkey
58- func setHideDesktopIconsHotkey( keyCombo: SCKeyCombo ? ) -> Void {
59- if nil != hideDesktopIconsHotkey{
60- hideDesktopIconsHotkey!. unregister ( )
60+ if !array!. contains ( path) {
61+ array!. append ( path)
6162 }
62- if nil != keyCombo {
63- hideDesktopIconsHotkey = SCHotkey . init ( keyCombo: keyCombo!, identifier: " hideDesktopIcons " , handler: { ( _) in
64- if SSDesktopManager . shared ( ) . isAllDesktopCovered ( ) {
65- SSDesktopManager . shared ( ) . uncoverAllDesktop ( )
63+ HAFConfigureManager . sharedManager. setUserDefinedHotkeyPaths ( array: array!)
64+ var hotkey = userDefinedHotkeys. first { ( str, k) -> Bool in
65+ return str == path
66+ } ? . 1
67+ if nil == hotkey{
68+ hotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: path) , identifier: path, handler: { ( k) in
69+ let p : String ! = k? . identifier
70+ if p. lowercased ( ) . hasSuffix ( " .app " ) {
71+ NSWorkspace . shared. launchApplication ( p)
6672 } else {
67- SSDesktopManager . shared ( ) . setupAllDesktopWithDesktopBackgroundImage ( )
68- SSDesktopManager . shared ( ) . coverAllDesktop ( )
73+ NSWorkspace . shared. openFile ( p)
6974 }
70- } ) ;
71- hideDesktopIconsHotkey! . register ( )
75+ } )
76+ userDefinedHotkeys . append ( ( path , hotkey! ) )
7277 }
73- HAFConfigureManager . sharedManager . setHideDesktopIconsKeyCombo ( keyCombo : keyCombo )
78+ return hotkey
7479 }
7580
76- //Turn off display hotkey
77- func setTurnOffDisplayHotkey( keyCombo: SCKeyCombo ? ) -> Void {
78- if nil != turnOffDisplayHotkey{
79- turnOffDisplayHotkey!. unregister ( )
81+ func removeHotkeyForPath( path: String ! ) -> Void {
82+ var array = HAFConfigureManager . sharedManager. userDefinedHotkeyPaths ( )
83+ if nil == array {
84+ return
85+ }
86+ if !array!. contains ( path) {
87+ return
8088 }
81- if nil != keyCombo {
82- turnOffDisplayHotkey = SCHotkey . init ( keyCombo: keyCombo!, identifier: " turnOffDisplay " , handler: { ( _) in
83- SSEnergyManager . shared ( ) . displaySleep ( )
84- } ) ;
85- turnOffDisplayHotkey!. register ( )
89+ if let index = array!. index ( of: path) {
90+ array!. remove ( at: index)
91+ }
92+ HAFConfigureManager . sharedManager. setUserDefinedHotkeyPaths ( array: array!)
93+ userDefinedHotkeys. removeAll { ( str, k) -> Bool in
94+ return str == path
8695 }
87- HAFConfigureManager . sharedManager. setTurnOffDisplayKeyCombo ( keyCombo: keyCombo)
8896 }
8997
90- //Turn on dark mode hotkey
91- func setTurnOnDarkModeHotkey( keyCombo: SCKeyCombo ? ) -> Void {
92- if nil != turnOnDarkModeHotkey{
93- turnOnDarkModeHotkey!. unregister ( )
98+ func __initializeUserDefinedHotkeys( ) -> Void {
99+ guard let userDefinedPaths = HAFConfigureManager . sharedManager. userDefinedHotkeyPaths ( ) else {
100+ return
94101 }
95- if nil != keyCombo {
96- turnOnDarkModeHotkey = SCHotkey . init ( keyCombo: keyCombo!, identifier: " turnOnDarkMode " , handler: { ( _) in
97- SSAppearanceManager . shared ( ) . toggle ( )
98- } ) ;
99- turnOnDarkModeHotkey!. register ( )
102+ userDefinedHotkeys = userDefinedPaths. map { path in
103+ let hotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: path) , identifier: path, handler: { ( k) in
104+ let p : String ! = k? . identifier
105+ if p. lowercased ( ) . hasSuffix ( " .app " ) {
106+ NSWorkspace . shared. launchApplication ( p)
107+ } else {
108+ NSWorkspace . shared. openFile ( p)
109+ }
110+ } )
111+ return ( path, hotkey!)
100112 }
101- HAFConfigureManager . sharedManager. setTurnOnDarkModeKeyCombo ( keyCombo: keyCombo)
113+ }
114+
115+ func __initializePredefinedHotkeys( ) -> Void {
116+ displayDesktopHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . displayDesktop) , identifier: HotkeyIdentifiers . displayDesktop, handler: { ( _) in
117+ SSDesktopManager . shared ( ) . showDesktop ( false )
118+ } )
119+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Display Desktop " , comment: " " ) , displayDesktopHotkey!) )
120+
121+ hideDesktopIconsHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . hideDesktopIcons) , identifier: HotkeyIdentifiers . hideDesktopIcons, handler: { ( _) in
122+ if SSDesktopManager . shared ( ) . isAllDesktopCovered ( ) {
123+ SSDesktopManager . shared ( ) . uncoverAllDesktop ( )
124+ } else {
125+ SSDesktopManager . shared ( ) . setupAllDesktopWithDesktopBackgroundImage ( )
126+ SSDesktopManager . shared ( ) . coverAllDesktop ( )
127+ }
128+ } )
129+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Hide Desktop Icons " , comment: " " ) , hideDesktopIconsHotkey!) )
130+
131+ turnOffDisplayHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . turnOffDisplay) , identifier: HotkeyIdentifiers . turnOffDisplay, handler: { ( _) in
132+ SSEnergyManager . shared ( ) . displaySleep ( )
133+ } )
134+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Turn Off The Display " , comment: " " ) , turnOffDisplayHotkey!) )
135+
136+ turnOnDarkModeHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . turnOnDarkMode) , identifier: HotkeyIdentifiers . turnOnDarkMode, handler: { ( _) in
137+ SSAppearanceManager . shared ( ) . toggle ( )
138+ } )
139+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Turn On Dark Mode " , comment: " " ) , turnOnDarkModeHotkey!) )
140+
141+ sleepMacHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . sleepMac) , identifier: HotkeyIdentifiers . sleepMac, handler: { ( _) in
142+ SSEnergyManager . shared ( ) . sleep ( )
143+ } )
144+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Sleep Mac " , comment: " " ) , sleepMacHotkey!) )
145+
146+ enterScreensaverHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . enterScreensaver) , identifier: HotkeyIdentifiers . enterScreensaver, handler: { ( _) in
147+ SSEnergyManager . shared ( ) . screenSaver ( )
148+ } )
149+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Enter Screensaver " , comment: " " ) , enterScreensaverHotkey!) )
150+
151+ preventSleepHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . preventSleep) , identifier: HotkeyIdentifiers . preventSleep, handler: { ( _) in
152+ SSEnergyManager . shared ( ) . preventSleep ( !SSEnergyManager. shared ( ) . isPreventSleepRunning ( ) )
153+ } )
154+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Prevent Sleep " , comment: " " ) , preventSleepHotkey!) )
155+
156+ disableMouseCursorHotkey = SCHotkey . init ( keyCombo: HAFConfigureManager . sharedManager. keyComboWithIdentifier ( identifier: HotkeyIdentifiers . disableMouseCursor) , identifier: HotkeyIdentifiers . disableMouseCursor, handler: { ( _) in
157+ if SSCursorManager . shared ( ) . isCursorEnable ( ) {
158+ SSCursorManager . shared ( ) . disableCursor ( )
159+ } else {
160+ SSCursorManager . shared ( ) . enableCursor ( )
161+ }
162+ } )
163+ preDefinedHotkeys. append ( ( NSLocalizedString ( " Disable Mouse Cursor " , comment: " " ) , disableMouseCursorHotkey!) )
102164 }
103165}
0 commit comments