Added hotkey preferences.

CQTexperiment
vspader 2006-09-10 21:27:20 +00:00
parent 1912e146d5
commit e550a6aac8
10 changed files with 206 additions and 66 deletions

View File

@ -4,6 +4,8 @@
#import "PlaylistController.h" #import "PlaylistController.h"
#import "FileTreeController.h" #import "FileTreeController.h"
#import "NDHotKeyEvent.h"
@interface AppController : NSObject @interface AppController : NSObject
{ {
@ -25,6 +27,10 @@
IBOutlet NSDrawer *fileDrawer; IBOutlet NSDrawer *fileDrawer;
IBOutlet FileTreeController *fileTreeController; IBOutlet FileTreeController *fileTreeController;
NDHotKeyEvent *playHotKey;
NDHotKeyEvent *prevHotKey;
NDHotKeyEvent *nextHotKey;
} }
- (IBAction)openFiles:(id)sender; - (IBAction)openFiles:(id)sender;

View File

@ -206,75 +206,77 @@
- (void)initDefaults - (void)initDefaults
{ {
NSMutableDictionary *userDefaultsValuesDict = [NSMutableDictionary dictionary]; NSMutableDictionary *userDefaultsValuesDict = [NSMutableDictionary dictionary];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:35] forKey:@"hotkeyCodePlay"]; [userDefaultsValuesDict setObject:[NSNumber numberWithInt:35] forKey:@"hotKeyPlayKeyCode"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:controlKey+cmdKey] forKey:@"hotkeyModifiersPlay"]; [userDefaultsValuesDict setObject:[NSNumber numberWithInt:(NSControlKeyMask|NSCommandKeyMask)] forKey:@"hotKeyPlayModifiers"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:'P'] forKey:@"hotKeyPlayCharacter"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:45] forKey:@"hotkeyCodeNext"]; [userDefaultsValuesDict setObject:[NSNumber numberWithInt:45] forKey:@"hotKeyNextKeyCode"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:controlKey+cmdKey] forKey:@"hotkeyModifiersNext"]; [userDefaultsValuesDict setObject:[NSNumber numberWithInt:(NSControlKeyMask|NSCommandKeyMask)] forKey:@"hotKeyNextModifiers"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:'N'] forKey:@"hotKeyNextCharacter"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:15] forKey:@"hotkeyCodePrevious"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:controlKey+cmdKey] forKey:@"hotkeyModifiersPrevious"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:15] forKey:@"hotKeyPreviousKeyCode"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:(NSControlKeyMask|NSCommandKeyMask)] forKey:@"hotKeyPreviousModifiers"];
[userDefaultsValuesDict setObject:[NSNumber numberWithInt:'R'] forKey:@"hotKeyPreviousCharacter"];
//Register and sync defaults //Register and sync defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict]; [[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];
[[NSUserDefaults standardUserDefaults] synchronize]; [[NSUserDefaults standardUserDefaults] synchronize];
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.hotKeyPlayKeyCode" options:0 context:nil];
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.hotKeyPreviousKeyCode" options:0 context:nil];
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.hotKeyNextKeyCode" options:0 context:nil];
}
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqualToString:@"values.hotKeyPlayKeyCode"]) {
[self registerHotKeys];
}
else if ([keyPath isEqualToString:@"values.hotKeyPreviousKeyCode"]) {
[self registerHotKeys];
}
else if ([keyPath isEqualToString:@"values.hotKeyNextKeyCode"]) {
[self registerHotKeys];
}
} }
//Register the Hotkeys. Added by Chris Henderson, 21 May 2006
//See http://www.dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily.html
- (void)registerHotKeys - (void)registerHotKeys
{ {
EventHotKeyRef gMyHotKeyRef; NSLog(@"REGISTERING HOTKEYS");
EventHotKeyID gMyHotKeyID;
EventTypeSpec eventType; [playHotKey release];
eventType.eventClass=kEventClassKeyboard; playHotKey = [[NDHotKeyEvent alloc]
eventType.eventKind=kEventHotKeyPressed; initWithKeyCode: [[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"hotKeyPlayKeyCode"] intValue]
InstallApplicationEventHandler(&handleHotKey,1,&eventType,self,NULL); character: [[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"hotKeyPlayCharacter"] intValue]
//Play modifierFlags: [[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"hotKeyPlayModifiers"] intValue]
gMyHotKeyID.signature='htk1'; ];
gMyHotKeyID.id=1;
if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodePlay"]!=-999) [prevHotKey release];
{ prevHotKey = [[NDHotKeyEvent alloc]
RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodePlay"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyModifiersPlay"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef); initWithKeyCode: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPreviousKeyCode"]
} character: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPreviousCharacter"]
//Previous modifierFlags: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPreviousModifiers"]
gMyHotKeyID.signature='htk2'; ];
gMyHotKeyID.id=2;
if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodePrevious"]!=-999) [nextHotKey release];
{ nextHotKey = [[NDHotKeyEvent alloc]
NSLog(@"REGISTERING: %i", [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodePrevious"]); initWithKeyCode: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyNextKeyCode"]
RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodePrevious"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyModifiersPrevious"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef); character: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyNextCharacter"]
} modifierFlags: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyNextModifiers"]
//Next ];
gMyHotKeyID.signature='htk3';
gMyHotKeyID.id=3; [playHotKey setTarget:self selector:@selector(clickPlay)];
if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeNext"]!=-999) [prevHotKey setTarget:self selector:@selector(clickPrev)];
{ [nextHotKey setTarget:self selector:@selector(clickNext)];
RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeNext"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyModifiersNext"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef);
} [playHotKey setEnabled:YES];
[prevHotKey setEnabled:YES];
[nextHotKey setEnabled:YES];
} }
//Handle the Hotkeys. Added by Chris Henderson, 21 May 2006
OSStatus handleHotKey(EventHandlerCallRef nextHandler,EventRef theEvent,void *userData)
{
EventHotKeyID hkID;
GetEventParameter(theEvent,kEventParamDirectObject,typeEventHotKeyID,NULL,sizeof(hkID),NULL,&hkID);
int i = hkID.id;
NSLog(@"Handling: %i", i);
switch (i)
{
case 1: [userData clickPlay];
break;
case 2: [userData clickPrev];
break;
case 3: [userData clickNext];
break;
}
return noErr;
}
- (void)clickPlay - (void)clickPlay
{ {
[playButton performClick:nil]; [playButton performClick:nil];

View File

@ -112,6 +112,8 @@
8E7A0F2B0A8FEB4A00F27EE8 /* shuffle_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F170A8FEB4A00F27EE8 /* shuffle_on.png */; }; 8E7A0F2B0A8FEB4A00F27EE8 /* shuffle_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F170A8FEB4A00F27EE8 /* shuffle_on.png */; };
8E7A0F2C0A8FEB4A00F27EE8 /* volume_high.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F180A8FEB4A00F27EE8 /* volume_high.png */; }; 8E7A0F2C0A8FEB4A00F27EE8 /* volume_high.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F180A8FEB4A00F27EE8 /* volume_high.png */; };
8E7A0F2D0A8FEB4A00F27EE8 /* volume_low.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F190A8FEB4A00F27EE8 /* volume_low.png */; }; 8E7A0F2D0A8FEB4A00F27EE8 /* volume_low.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E7A0F190A8FEB4A00F27EE8 /* volume_low.png */; };
8E7C2B160AACE0F2009B4EAD /* NDHotKeyEvent.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E7C2B140AACE0F2009B4EAD /* NDHotKeyEvent.h */; };
8E7C2B170AACE0F2009B4EAD /* NDHotKeyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E7C2B150AACE0F2009B4EAD /* NDHotKeyEvent.m */; };
8EA917300A336CC30087CDE2 /* Shorten.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EA9172F0A336CC30087CDE2 /* Shorten.framework */; }; 8EA917300A336CC30087CDE2 /* Shorten.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EA9172F0A336CC30087CDE2 /* Shorten.framework */; };
8EB450080A2BB8B300AA711F /* Cog Help in Resources */ = {isa = PBXBuildFile; fileRef = 8EB44FF90A2BB8B300AA711F /* Cog Help */; }; 8EB450080A2BB8B300AA711F /* Cog Help in Resources */ = {isa = PBXBuildFile; fileRef = 8EB44FF90A2BB8B300AA711F /* Cog Help */; };
8EB971790A44B74A009803E3 /* MAD.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E1849C40A43DB5C0084C69D /* MAD.framework */; }; 8EB971790A44B74A009803E3 /* MAD.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E1849C40A43DB5C0084C69D /* MAD.framework */; };
@ -180,6 +182,7 @@
8E07AAF10AAC910500A4B32F /* SS_PreferencePaneProtocol.h in CopyFiles */, 8E07AAF10AAC910500A4B32F /* SS_PreferencePaneProtocol.h in CopyFiles */,
8E07AAF20AAC910500A4B32F /* SS_PrefsController.h in CopyFiles */, 8E07AAF20AAC910500A4B32F /* SS_PrefsController.h in CopyFiles */,
8E07AB780AAC930B00A4B32F /* PreferencesController.h in CopyFiles */, 8E07AB780AAC930B00A4B32F /* PreferencesController.h in CopyFiles */,
8E7C2B160AACE0F2009B4EAD /* NDHotKeyEvent.h in CopyFiles */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -331,6 +334,8 @@
8E7A0F170A8FEB4A00F27EE8 /* shuffle_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shuffle_on.png; sourceTree = "<group>"; }; 8E7A0F170A8FEB4A00F27EE8 /* shuffle_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shuffle_on.png; sourceTree = "<group>"; };
8E7A0F180A8FEB4A00F27EE8 /* volume_high.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_high.png; sourceTree = "<group>"; }; 8E7A0F180A8FEB4A00F27EE8 /* volume_high.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_high.png; sourceTree = "<group>"; };
8E7A0F190A8FEB4A00F27EE8 /* volume_low.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_low.png; sourceTree = "<group>"; }; 8E7A0F190A8FEB4A00F27EE8 /* volume_low.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = volume_low.png; sourceTree = "<group>"; };
8E7C2B140AACE0F2009B4EAD /* NDHotKeyEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NDHotKeyEvent.h; sourceTree = "<group>"; };
8E7C2B150AACE0F2009B4EAD /* NDHotKeyEvent.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NDHotKeyEvent.m; sourceTree = "<group>"; };
8EA9172F0A336CC30087CDE2 /* Shorten.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Shorten.framework; path = Libraries/Shorten/build/Release/Shorten.framework; sourceTree = "<group>"; }; 8EA9172F0A336CC30087CDE2 /* Shorten.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Shorten.framework; path = Libraries/Shorten/build/Release/Shorten.framework; sourceTree = "<group>"; };
8EB44FF90A2BB8B300AA711F /* Cog Help */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "Cog Help"; sourceTree = "<group>"; }; 8EB44FF90A2BB8B300AA711F /* Cog Help */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "Cog Help"; sourceTree = "<group>"; };
8EFFCD420AA093AF00C458A5 /* DirectoryNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DirectoryNode.h; sourceTree = "<group>"; }; 8EFFCD420AA093AF00C458A5 /* DirectoryNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DirectoryNode.h; sourceTree = "<group>"; };
@ -522,6 +527,8 @@
8E75752209F31D5A0080F1EE /* TrackingSlider.m */, 8E75752209F31D5A0080F1EE /* TrackingSlider.m */,
8E4C7F060A0509FC003BE25F /* DragScrollView.h */, 8E4C7F060A0509FC003BE25F /* DragScrollView.h */,
8E4C7F070A0509FC003BE25F /* DragScrollView.m */, 8E4C7F070A0509FC003BE25F /* DragScrollView.m */,
8E7C2B140AACE0F2009B4EAD /* NDHotKeyEvent.h */,
8E7C2B150AACE0F2009B4EAD /* NDHotKeyEvent.m */,
); );
path = Custom; path = Custom;
sourceTree = "<group>"; sourceTree = "<group>";
@ -870,6 +877,7 @@
8EFFCD780AA093AF00C458A5 /* UKMainThreadProxy.m in Sources */, 8EFFCD780AA093AF00C458A5 /* UKMainThreadProxy.m in Sources */,
8E07AAF30AAC910500A4B32F /* SS_PrefsController.m in Sources */, 8E07AAF30AAC910500A4B32F /* SS_PrefsController.m in Sources */,
8E07AB790AAC930B00A4B32F /* PreferencesController.m in Sources */, 8E07AB790AAC930B00A4B32F /* PreferencesController.m in Sources */,
8E7C2B170AACE0F2009B4EAD /* NDHotKeyEvent.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -2,7 +2,24 @@
IBClasses = ( IBClasses = (
{CLASS = FileDrawerPane; LANGUAGE = ObjC; SUPERCLASS = PreferencePane; }, {CLASS = FileDrawerPane; LANGUAGE = ObjC; SUPERCLASS = PreferencePane; },
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{CLASS = HotKeyPane; LANGUAGE = ObjC; SUPERCLASS = PreferencePane; }, {CLASS = HotKeyControl; LANGUAGE = ObjC; SUPERCLASS = NDHotKeyControl; },
{
ACTIONS = {
grabNextHotKey = id;
grabPlayHotKey = id;
grabPrevHotKey = id;
hotKeyChanged = id;
};
CLASS = HotKeyPane;
LANGUAGE = ObjC;
OUTLETS = {
nextHotKeyControl = HotKeyControl;
playHotKeyControl = HotKeyControl;
prevHotKeyControl = HotKeyControl;
};
SUPERCLASS = PreferencePane;
},
{CLASS = NDHotKeyControl; LANGUAGE = ObjC; SUPERCLASS = NSTextField; },
{ {
CLASS = PrefPaneController; CLASS = PrefPaneController;
LANGUAGE = ObjC; LANGUAGE = ObjC;

View File

@ -7,16 +7,16 @@
<key>IBEditorPositions</key> <key>IBEditorPositions</key>
<dict> <dict>
<key>10</key> <key>10</key>
<string>-9 537 668 209 0 0 1024 746 </string> <string>178 415 668 209 0 0 1024 746 </string>
<key>11</key> <key>11</key>
<string>155 171 241 464 0 0 1024 746 </string> <string>290 507 273 151 0 0 1024 746 </string>
</dict> </dict>
<key>IBFramework Version</key> <key>IBFramework Version</key>
<string>446.1</string> <string>446.1</string>
<key>IBOpenObjects</key> <key>IBOpenObjects</key>
<array> <array>
<integer>11</integer>
<integer>10</integer> <integer>10</integer>
<integer>11</integer>
</array> </array>
<key>IBSystem Version</key> <key>IBSystem Version</key>
<string>8J135</string> <string>8J135</string>

View File

@ -16,6 +16,10 @@
8E07ABDC0AAC95BC00A4B32F /* file_drawer.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E07ABDA0AAC95BC00A4B32F /* file_drawer.png */; }; 8E07ABDC0AAC95BC00A4B32F /* file_drawer.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E07ABDA0AAC95BC00A4B32F /* file_drawer.png */; };
8E07ABDD0AAC95BC00A4B32F /* hot_keys.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E07ABDB0AAC95BC00A4B32F /* hot_keys.png */; }; 8E07ABDD0AAC95BC00A4B32F /* hot_keys.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E07ABDB0AAC95BC00A4B32F /* hot_keys.png */; };
8E07AC050AAC968C00A4B32F /* Preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 8E07AC030AAC968C00A4B32F /* Preferences.nib */; }; 8E07AC050AAC968C00A4B32F /* Preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 8E07AC030AAC968C00A4B32F /* Preferences.nib */; };
8E6C12160AACAE4100819171 /* NDHotKeyControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6C12130AACAE4100819171 /* NDHotKeyControl.m */; };
8E6C12170AACAE4100819171 /* NDHotKeyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6C12150AACAE4100819171 /* NDHotKeyEvent.m */; };
8E6C123A0AACAEF200819171 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E6C12390AACAEF200819171 /* Carbon.framework */; };
8E6C13A00AACBAB500819171 /* HotKeyControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6C139F0AACBAB500819171 /* HotKeyControl.m */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
@ -38,6 +42,13 @@
8E07ABDA0AAC95BC00A4B32F /* file_drawer.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = file_drawer.png; path = Icons/file_drawer.png; sourceTree = "<group>"; }; 8E07ABDA0AAC95BC00A4B32F /* file_drawer.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = file_drawer.png; path = Icons/file_drawer.png; sourceTree = "<group>"; };
8E07ABDB0AAC95BC00A4B32F /* hot_keys.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = hot_keys.png; path = Icons/hot_keys.png; sourceTree = "<group>"; }; 8E07ABDB0AAC95BC00A4B32F /* hot_keys.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = hot_keys.png; path = Icons/hot_keys.png; sourceTree = "<group>"; };
8E07AC040AAC968C00A4B32F /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Preferences.nib; sourceTree = "<group>"; }; 8E07AC040AAC968C00A4B32F /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Preferences.nib; sourceTree = "<group>"; };
8E6C12120AACAE4100819171 /* NDHotKeyControl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NDHotKeyControl.h; sourceTree = "<group>"; };
8E6C12130AACAE4100819171 /* NDHotKeyControl.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NDHotKeyControl.m; sourceTree = "<group>"; };
8E6C12140AACAE4100819171 /* NDHotKeyEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NDHotKeyEvent.h; sourceTree = "<group>"; };
8E6C12150AACAE4100819171 /* NDHotKeyEvent.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NDHotKeyEvent.m; sourceTree = "<group>"; };
8E6C12390AACAEF200819171 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
8E6C139E0AACBAB500819171 /* HotKeyControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HotKeyControl.h; sourceTree = "<group>"; };
8E6C139F0AACBAB500819171 /* HotKeyControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HotKeyControl.m; sourceTree = "<group>"; };
D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -47,6 +58,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */,
8E6C123A0AACAEF200819171 /* Carbon.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -97,6 +109,12 @@
8E07AA7F0AAC8EA200A4B32F /* FileDrawerPane.m */, 8E07AA7F0AAC8EA200A4B32F /* FileDrawerPane.m */,
8E07AA800AAC8EA200A4B32F /* HotKeyPane.h */, 8E07AA800AAC8EA200A4B32F /* HotKeyPane.h */,
8E07AA810AAC8EA200A4B32F /* HotKeyPane.m */, 8E07AA810AAC8EA200A4B32F /* HotKeyPane.m */,
8E6C12120AACAE4100819171 /* NDHotKeyControl.h */,
8E6C12130AACAE4100819171 /* NDHotKeyControl.m */,
8E6C12140AACAE4100819171 /* NDHotKeyEvent.h */,
8E6C12150AACAE4100819171 /* NDHotKeyEvent.m */,
8E6C139E0AACBAB500819171 /* HotKeyControl.h */,
8E6C139F0AACBAB500819171 /* HotKeyControl.m */,
); );
name = Classes; name = Classes;
sourceTree = "<group>"; sourceTree = "<group>";
@ -104,6 +122,7 @@
1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
8E6C12390AACAEF200819171 /* Carbon.framework */,
1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */,
); );
name = "Linked Frameworks"; name = "Linked Frameworks";
@ -203,6 +222,9 @@
8E07AA880AAC8EA200A4B32F /* HotKeyPane.m in Sources */, 8E07AA880AAC8EA200A4B32F /* HotKeyPane.m in Sources */,
8E07AA890AAC8EA200A4B32F /* PreferencePane.m in Sources */, 8E07AA890AAC8EA200A4B32F /* PreferencePane.m in Sources */,
8E07AA8A0AAC8EA200A4B32F /* PrefPaneController.m in Sources */, 8E07AA8A0AAC8EA200A4B32F /* PrefPaneController.m in Sources */,
8E6C12160AACAE4100819171 /* NDHotKeyControl.m in Sources */,
8E6C12170AACAE4100819171 /* NDHotKeyEvent.m in Sources */,
8E6C13A00AACBAB500819171 /* HotKeyControl.m in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -8,10 +8,18 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import "PreferencePane.h" #import "PreferencePane.h"
#import "HotKeyControl.h"
@interface HotKeyPane : PreferencePane { @interface HotKeyPane : PreferencePane {
IBOutlet HotKeyControl *playHotKeyControl;
IBOutlet HotKeyControl *prevHotKeyControl;
IBOutlet HotKeyControl *nextHotKeyControl;
} }
- (IBAction) grabPlayHotKey:(id)sender;
- (IBAction) grabPrevHotKey:(id)sender;
- (IBAction) grabNextHotKey:(id)sender;
- (IBAction) hotKeyChanged:(id)sender;
@end @end

View File

@ -7,7 +7,7 @@
// //
#import "HotKeyPane.h" #import "HotKeyPane.h"
#import "NDHotKeyEvent.h"
@implementation HotKeyPane @implementation HotKeyPane
@ -15,6 +15,83 @@
{ {
[self setName:@"Hot Keys"]; [self setName:@"Hot Keys"];
[self setIcon:@"hot_keys"]; [self setIcon:@"hot_keys"];
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification object: [view window]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object: [view window]];
[prevHotKeyControl setKeyCode: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPreviousKeyCode"] ];
[prevHotKeyControl setCharacter: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPreviousCharacter"] ];
[prevHotKeyControl setModifierFlags: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPreviousModifiers"] ];
[prevHotKeyControl updateStringValue];
[nextHotKeyControl setKeyCode: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyNextKeyCode"] ];
[nextHotKeyControl setCharacter: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyNextCharacter"] ];
[nextHotKeyControl setModifierFlags: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyNextModifiers"] ];
[nextHotKeyControl updateStringValue];
[playHotKeyControl setKeyCode: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPlayKeyCode"] ];
[playHotKeyControl setCharacter: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPlayCharacter"] ];
[playHotKeyControl setModifierFlags: [[NSUserDefaults standardUserDefaults] integerForKey:@"hotKeyPlayModifiers"] ];
[playHotKeyControl updateStringValue];
}
/*- (void)windowDidBecomeKey:(id)notification
{
if ([notification object] == [view window]) {
NSLog(@"BECAME KEY: %@", notification);
[playHotKeyControl startObserving];
[prevHotKeyControl startObserving];
[nextHotKeyControl startObserving];
}
}
*/
- (void)windowDidResignKey:(id)notification
{
if ([notification object] == [view window]) {
NSLog(@"RESIGNED KEY: %@", notification);
[playHotKeyControl stopObserving];
[prevHotKeyControl stopObserving];
[nextHotKeyControl stopObserving];
}
}
- (IBAction) grabPlayHotKey:(id)sender
{
[playHotKeyControl startObserving];
}
- (IBAction) grabPrevHotKey:(id)sender
{
[prevHotKeyControl startObserving];
}
- (IBAction) grabNextHotKey:(id)sender
{
[nextHotKeyControl startObserving];
}
- (IBAction) hotKeyChanged:(id)sender
{
if (sender == playHotKeyControl) {
[[NSUserDefaults standardUserDefaults] setInteger:[playHotKeyControl character] forKey:@"hotKeyPlayCharacter"];
[[NSUserDefaults standardUserDefaults] setInteger:[playHotKeyControl modifierFlags] forKey:@"hotKeyPlayModifiers"];
[[NSUserDefaults standardUserDefaults] setInteger:[playHotKeyControl keyCode] forKey:@"hotKeyPlayKeyCode"];
}
else if (sender == prevHotKeyControl) {
[[NSUserDefaults standardUserDefaults] setInteger:[prevHotKeyControl character] forKey:@"hotKeyPreviousCharacter"];
[[NSUserDefaults standardUserDefaults] setInteger:[prevHotKeyControl modifierFlags] forKey:@"hotKeyPreviousModifiers"];
[[NSUserDefaults standardUserDefaults] setInteger:[prevHotKeyControl keyCode] forKey:@"hotKeyPreviousKeyCode"];
}
else if (sender == nextHotKeyControl) {
[[NSUserDefaults standardUserDefaults] setInteger:[nextHotKeyControl character] forKey:@"hotKeyNextCharacter"];
[[NSUserDefaults standardUserDefaults] setInteger:[nextHotKeyControl modifierFlags] forKey:@"hotKeyNextModifiers"];
[[NSUserDefaults standardUserDefaults] setInteger:[nextHotKeyControl keyCode] forKey:@"hotKeyNextKeyCode"];
}
[sender stopObserving];
} }
@end @end

View File

@ -22,7 +22,7 @@
[prefs setDebug:YES]; [prefs setDebug:YES];
// Set which panes are included, and their order. // Set which panes are included, and their order.
// [prefs setPanesOrder:[NSArray arrayWithObjects:@"General", @"Updating", @"A Non-Existent Preference Pane", nil]]; //[prefs setPanesOrder:[NSArray arrayWithObjects:@"General", @"Updating", @"A Non-Existent Preference Pane", nil]];
} }
// Show the preferences window. // Show the preferences window.