@@ -19,6 +19,69 @@ struct Usage: Codable {
1919 var date : Double
2020}
2121
22+ class MyText : NSTextField {
23+
24+
25+ override func keyDown( with event: NSEvent ) {
26+ print ( " WHAT " , event. keyCode)
27+ }
28+ }
29+
30+ class NewShortcutKey : NSViewController , NSTextFieldDelegate {
31+ var label : NSTextField !
32+ var onDismiss : ( ( ) -> ( ) ) !
33+ var currentCode : Int = AppDelegate . shared. shortcutKey
34+
35+ override func loadView( ) {
36+ self . view = NSView ( )
37+ }
38+
39+ @objc func onSet( ) {
40+ AppDelegate . shared. setShortcutKey ( key: currentCode)
41+ onDismiss ( )
42+ }
43+
44+ override func viewDidLoad( ) {
45+ self . view. setFrameSize ( NSSize ( width: width, height: 60 ) )
46+
47+ NSEvent . addLocalMonitorForEvents ( matching: . keyDown, handler: { event in
48+ print ( " Event " , event. keyCode)
49+ if event. keyCode == 53 {
50+ self . onDismiss ( )
51+ }
52+ self . currentCode = Int ( event. keyCode)
53+ self . label. stringValue = " Key code: \( self . currentCode) "
54+ return nil
55+ } )
56+
57+ let button = NSButton ( )
58+ button. title = " Update shortcut key "
59+ button. setFrameOrigin ( NSPoint ( x: margin, y: 0 ) )
60+ button. setFrameSize ( NSSize ( width: width - margin * 2 , height: 20 ) )
61+ button. action = #selector( onSet)
62+ button. target = self
63+
64+ label = NSTextField ( labelWithString: " Key code: \( currentCode) " )
65+ label. lineBreakMode = . byWordWrapping
66+ label. setFrameOrigin ( NSPoint ( x: 0 , y: 20 ) )
67+ label. setFrameSize ( NSSize ( width: width - margin * 2 , height: 20 ) )
68+ self . view. addSubview ( label)
69+
70+ let description = NSTextField ( labelWithString: " Type any key. Escape to cancel. " )
71+ description. setFrameOrigin ( NSPoint ( x: 0 , y: 40 ) )
72+ description. setFrameSize ( NSSize ( width: width - margin * 2 , height: 20 ) )
73+ self . view. addSubview ( description)
74+
75+ self . view. addSubview ( button)
76+ self . view. becomeFirstResponder ( )
77+ }
78+
79+ override func keyDown( with event: NSEvent ) {
80+ label. stringValue = " \( event. keyCode) "
81+ print ( " OK " )
82+ }
83+ }
84+
2285class MyVC : NSViewController , NSTextFieldDelegate {
2386 var textField : NSTextField !
2487 var customView : CustomView !
@@ -29,6 +92,8 @@ class MyVC: NSViewController, NSTextFieldDelegate {
2992 var showAtCursor : NSMenuItem !
3093 var menuButton : NSButton !
3194
95+ var shortcutPopover : NSPopover !
96+
3297 override func loadView( ) {
3398 self . view = NSView ( )
3499 }
@@ -48,6 +113,13 @@ class MyVC: NSViewController, NSTextFieldDelegate {
48113 NSApp . terminate ( nil )
49114 }
50115
116+ @objc func setShortcutKey( ) {
117+ print ( " Set shortcut key " )
118+ // AppDelegate.shared.registerHotkey(keyCode: 0x31)
119+ shortcutPopover. show ( relativeTo: menuButton. bounds, of: menuButton, preferredEdge: NSRectEdge . minY)
120+ // shortcutPopover.pres
121+ }
122+
51123 override func viewDidLoad( ) {
52124 let buttonSize = 20
53125
@@ -73,9 +145,16 @@ class MyVC: NSViewController, NSTextFieldDelegate {
73145 showAtCursor = NSMenuItem ( title: " Show at cursor " , action: #selector( toggleShowAtCursor) , keyEquivalent: " " )
74146 showAtCursor. state = AppDelegate . shared. showAtMouse ? . on : . off
75147 optionsMenu. addItem ( showAtCursor)
148+ optionsMenu. addItem ( withTitle: " Change shortcut key " , action: #selector( setShortcutKey) , keyEquivalent: " " )
76149 optionsMenu. addItem ( withTitle: " Quit " , action: #selector( onQuit) , keyEquivalent: " " )
77150
78151
152+ shortcutPopover = NSPopover ( )
153+ let ksvc = NewShortcutKey ( )
154+ ksvc. onDismiss = {
155+ self . shortcutPopover. performClose ( nil )
156+ }
157+ shortcutPopover. contentViewController = ksvc
79158
80159 let decoder = JSONDecoder ( )
81160 if let data = UserDefaults . standard. data ( forKey: usageKey) ,
@@ -124,30 +203,36 @@ class MyVC: NSViewController, NSTextFieldDelegate {
124203 customView. searchTerm = textField. stringValue
125204 }
126205
127- func textField( _ textField: NSTextField , textView: NSTextView , shouldSelectCandidateAt index: Int ) -> Bool {
128- print ( " Text field select " , index)
129- return true
130- }
131-
132206 func control( _ control: NSControl , textView: NSTextView , doCommandBy commandSelector: Selector ) -> Bool {
133207 print ( " Selector " , commandSelector)
208+ if commandSelector == #selector( moveRight ( _: ) ) {
209+ self . customView. setSelected ( proposed: self . customView. selected + 1 )
210+ return true
211+ }
212+ if commandSelector == #selector( moveLeft ( _: ) ) {
213+ self . customView. setSelected ( proposed: self . customView. selected - 1 )
214+ return true
215+ }
216+ if commandSelector == #selector( moveDown ( _: ) ) {
217+ self . customView. setSelected ( proposed: self . customView. selected + 10 )
218+ return true
219+ }
220+ if commandSelector == #selector( moveUp ( _: ) ) {
221+ self . customView. setSelected ( proposed: self . customView. selected - 10 )
222+ return true
223+ }
134224 if commandSelector == #selector( insertTab ( _: ) ) {
135- print ( " tab " )
136225 self . customView. setSelected ( proposed: self . customView. selected + 1 )
226+ return true
137227 }
138228 if commandSelector == #selector( insertBacktab ( _: ) ) {
139- print ( " back tab " )
140229 self . customView. setSelected ( proposed: self . customView. selected - 1 )
230+ return true
141231 }
142232 if commandSelector == #selector( cancelOperation ( _: ) ) {
143- print ( " Escape " )
144233 NSApp . hide ( nil )
145234 return true
146235 }
147236 return false
148237 }
149-
150- override func keyDown( with event: NSEvent ) {
151- print ( event. keyCode, " Key down here " )
152- }
153238}
0 commit comments