Added hotkey preferences.
parent
1912e146d5
commit
e550a6aac8
|
@ -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;
|
||||||
|
|
118
AppController.m
118
AppController.m
|
@ -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];
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Binary file not shown.
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue