aboutsummaryrefslogtreecommitdiff
path: root/AppKit/GTMHotKeyTextField.h
blob: 4177f49633c11b42d433b1f16c23cfc8bea2ee3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//
//  GTMHotKeyTextField.h
//
//  Copyright 2006-2008 Google Inc.
//
//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
//  use this file except in compliance with the License.  You may obtain a copy
//  of the License at
// 
//  http://www.apache.org/licenses/LICENSE-2.0
// 
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
//  License for the specific language governing permissions and limitations under
//  the License.
//

// Text field for capturing hot key entry. This is intended to be similar to the
// Apple key editor in their Keyboard pref pane.

// NOTE: There are strings that need to be localized to use this field.  See the
// code in stringForKeycode the the keys.  The keys are all the English versions
// so you'll get reasonable things if you don't have a strings file.

#import <Cocoa/Cocoa.h>
#import "GTMDefines.h"

// Dictionary key for hot key configuration information modifier flags.
// NSNumber of a unsigned int. Modifier flags are stored using Cocoa constants
// (same as NSEvent) you will need to translate them to Carbon modifier flags
// for use with RegisterEventHotKey()
#define kGTMHotKeyModifierFlagsKey     @"Modifiers"

// Dictionary key for hot key configuration of virtual key code.  NSNumber of
// unsigned int. For double-modifier hotkeys (see below) this value is ignored.
#define kGTMHotKeyKeyCodeKey           @"KeyCode"

// Dictionary key for hot key configuration of double-modifier tap. NSNumber
// BOOL value. Double-tap modifier keys cannot be used with
// RegisterEventHotKey(), you must implement your own Carbon event handler.
#define kGTMHotKeyDoubledModifierKey   @"DoubleModifier"

// Custom text field class used for hot key entry. In order to use this class
// you will need to configure your window's delegate, to return the related
// field editor.
//
//  Sample window delegate method:
//
//    -(id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject {
//      
//      if ([anObject isKindOfClass:[GTMHotKeyTextField class]]) {
//        return [GTMHotKeyFieldEditor sharedHotKeyFieldEditor];
//      } else {
//        return nil;  // Window will use the AppKit shared editor
//      }
//      
//    }
//
//
//  Other notes:
//  - Though you are free to implement control:textShouldEndEditing: in your
//    delegate its return is always ignored. The field always accepts only
//    one hotkey keystroke before editing ends.
//  - The "value" binding of this control is to the dictionary describing the
//    hotkey. At this time binding options are not supported.
//  - The field does not attempt to consume all hotkeys. Hotkeys which are
//    already bound in Apple prefs or other applications will have their
//    normal effect.
//

@interface GTMHotKeyTextField : NSTextField {
 @private
  NSDictionary    *hotKeyDict_;
  // Bindings
  NSObject        *boundObject_;
  NSString        *boundKeyPath_;
}

// Set/Get the hot key dictionary for the field. See above for key names.
- (void)setHotKeyValue:(NSDictionary *)hotKey;
- (NSDictionary *)hotKeyValue;

// Convert Cocoa modifier flags (-[NSEvent modifierFlags]) into a string for
// display. Modifiers are represented in the string in the same order they would
// appear in the Menu Manager.
//
//  Args: 
//    flags: -[NSEvent modifierFlags]
//
//  Returns:
//    Autoreleased NSString
//
+ (NSString *)stringForModifierFlags:(unsigned int)flags;

// Convert a keycode into a string that would result from typing the keycode in
// the current keyboard layout. This may be one or more characters.
//
// Args:
//   keycode: Virtual keycode such as one obtained from NSEvent
//   useGlyph: In many cases the glyphs are confusing, and a string is clearer.
//             However, if you want to display in a menu item, use must
//             have a glyph. Set useGlyph to FALSE to get localized strings
//             which are better for UI display in places other than menus.
//     bundle: Localization bundle to use for localizable key names
//
// Returns:
//   Autoreleased NSString
//
+ (NSString *)stringForKeycode:(UInt16)keycode 
                          useGlyph:(BOOL)useGlyph
                    resourceBundle:(NSBundle *)bundle;

@end

// Custom field editor for use with hotkey entry fields (GTMHotKeyTextField).
// See the GTMHotKeyTextField for instructions on using from the window
// delegate.
@interface GTMHotKeyFieldEditor : NSTextView {
 @private
  NSDictionary    *hotKeyDict_;  // strong
}

// Get the shared field editor for all hot key fields
+ (GTMHotKeyFieldEditor *)sharedHotKeyFieldEditor;

@end