#import "MenuController.h"
#import "PreferencesController.h"
#import <ITKit/ITHotKeyCenter.h>
+#import <ITKit/ITHotKey.h>
+#import <ITKit/ITKeyCombo.h>
#import "StatusWindowController.h"
#import "StatusItemHack.h"
- (void)clearHotKeys
{
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"PlayPause"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"NextTrack"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"PrevTrack"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"TrackInfo"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"ShowPlayer"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"UpcomingSongs"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"ToggleLoop"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"ToggleShuffle"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"IncrementVolume"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"DecrementVolume"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"IncrementRating"];
- [[ITHotKeyCenter sharedCenter] removeHotKey:@"DecrementRating"];
+ NSEnumerator *hotKeyEnumerator = [[[ITHotKeyCenter sharedCenter] allHotKeys] objectEnumerator];
+ ITHotKey *nextHotKey;
+
+ while ( (nextHotKey = [hotKeyEnumerator nextObject]) ) {
+ [[ITHotKeyCenter sharedCenter] unregisterHotKey:nextHotKey];
+ }
}
- (void)setupHotKeys
{
+ ITHotKey *hotKey;
+
if ([df objectForKey:@"PlayPause"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"PlayPause"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PlayPause"]]
- target:self action:@selector(playPause)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"PlayPause"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PlayPause"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(playPause)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"NextTrack"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"NextTrack"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"NextTrack"]]
- target:self action:@selector(nextSong)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"NextTrack"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"NextTrack"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(nextSong)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"PrevTrack"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"PrevTrack"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PrevTrack"]]
- target:self action:@selector(prevSong)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"PrevTrack"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PrevTrack"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(prevSong)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"ShowPlayer"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"ShowPlayer"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ShowPlayer"]]
- target:self action:@selector(showPlayer)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"ShowPlayer"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ShowPlayer"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(showPlayer)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"TrackInfo"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"TrackInfo"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"TrackInfo"]]
- target:self action:@selector(showCurrentTrackInfo)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"TrackInfo"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"TrackInfo"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(showCurrentTrackInfo)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"UpcomingSongs"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"UpcomingSongs"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"UpcomingSongs"]]
- target:self action:@selector(showUpcomingSongs)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"UpcomingSongs"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"UpcomingSongs"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(showUpcomingSongs)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"ToggleLoop"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"ToggleLoop"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleLoop"]]
- target:self action:@selector(toggleLoop)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"ToggleLoop"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleLoop"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(toggleLoop)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"ToggleShuffle"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"ToggleShuffle"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleShuffle"]]
- target:self action:@selector(toggleShuffle)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"ToggleShuffle"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleShuffle"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(toggleShuffle)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"IncrementVolume"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"IncrementVolume"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementVolume"]]
- target:self action:@selector(incrementVolume)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"IncrementVolume"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementVolume"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(incrementVolume)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"DecrementVolume"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"DecrementVolume"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementVolume"]]
- target:self action:@selector(decrementVolume)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"DecrementVolume"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementVolume"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(decrementVolume)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"IncrementRating"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"IncrementRating"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementRating"]]
- target:self action:@selector(incrementRating)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"IncrementRating"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementRating"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(incrementRating)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
if ([df objectForKey:@"DecrementRating"] != nil) {
- [[ITHotKeyCenter sharedCenter] addHotKey:@"DecrementRating"
- combo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementRating"]]
- target:self action:@selector(decrementRating)];
+ hotKey = [[ITHotKey alloc] init];
+ [hotKey setName:@"DecrementRating"];
+ [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementRating"]]];
+ [hotKey setTarget:self];
+ [hotKey setAction:@selector(decrementRating)];
+ [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]];
}
}
#import "PreferencesController.h"
#import "MainController.h"
#import <ITKit/ITHotKeyCenter.h>
+#import <ITKit/ITKeyCombo.h>
#import <ITKit/ITWindowPositioning.h>
+#import <ITKit/ITKeyBroadcaster.h>
#define SENDER_STATE (([sender state] == NSOnState) ? YES : NO)
if ([currentHotKey isEqualToString:@"PlayPause"]) {
[playPauseButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"PlayPause" combo:combo target:[MainController sharedController] action:@selector(playPause)];
} else if ([currentHotKey isEqualToString:@"NextTrack"]) {
[nextTrackButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"NextTrack" combo:combo target:[MainController sharedController] action:@selector(nextSong)];
} else if ([currentHotKey isEqualToString:@"PrevTrack"]) {
[previousTrackButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"PrevTrack" combo:combo target:[MainController sharedController] action:@selector(prevSong)];
} else if ([currentHotKey isEqualToString:@"ShowPlayer"]) {
[showPlayerButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"ShowPlayer" combo:combo target:[MainController sharedController] action:@selector(showPlayer)];
} else if ([currentHotKey isEqualToString:@"TrackInfo"]) {
[trackInfoButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"TrackInfo" combo:combo target:[MainController sharedController] action:@selector(showCurrentTrackInfo)];
} else if ([currentHotKey isEqualToString:@"UpcomingSongs"]) {
[upcomingSongsButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"UpcomingSongs" combo:combo target:[MainController sharedController] action:@selector(showUpcomingSongs)];
} else if ([currentHotKey isEqualToString:@"IncrementVolume"]) {
[volumeIncrementButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"IncrementVolume" combo:combo target:[MainController sharedController] action:@selector(incrementVolume)];
} else if ([currentHotKey isEqualToString:@"DecrementVolume"]) {
[volumeDecrementButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"DecrementVolume" combo:combo target:[MainController sharedController] action:@selector(decrementVolume)];
} else if ([currentHotKey isEqualToString:@"IncrementRating"]) {
[ratingIncrementButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"IncrementRating" combo:combo target:[MainController sharedController] action:@selector(incrementRating)];
} else if ([currentHotKey isEqualToString:@"DecrementRating"]) {
[ratingDecrementButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"DecrementRating" combo:combo target:[MainController sharedController] action:@selector(decrementRating)];
} else if ([currentHotKey isEqualToString:@"ToggleShuffle"]) {
[toggleShuffleButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"ToggleShuffle" combo:combo target:[MainController sharedController] action:@selector(toggleShuffle)];
} else if ([currentHotKey isEqualToString:@"ToggleLoop"]) {
[toggleLoopButton setTitle:string];
- //[[ITHotKeyCenter sharedCenter] addHotKey:@"ToggleLoop" combo:combo target:[MainController sharedController] action:@selector(toggleLoop)];
}
[controller setupHotKeys];
[self cancelHotKey:sender];
{
[currentHotKey autorelease];
currentHotKey = [key copy];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyEvent:) name:@"KeyBroadcasterEvent" object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyEvent:) name:ITKeyBroadcasterKeyEvent object:nil];
[NSApp beginSheet:keyComboPanel modalForWindow:window modalDelegate:self didEndSelector:nil contextInfo:nil];
}
- (void)keyEvent:(NSNotification *)note
{
- NSDictionary *info = [note userInfo];
- short keyCode;
- long modifiers;
- ITKeyCombo *newCombo;
-
- keyCode = [[info objectForKey:@"KeyCode"] shortValue];
- modifiers = [[info objectForKey:@"Modifiers"] longValue];
-
- newCombo = [[ITKeyCombo alloc] initWithKeyCode:keyCode modifiers:modifiers];
- [self setKeyCombo:newCombo];
+ [self setKeyCombo:[[[note userInfo] objectForKey:@"keyCombo"] copy]];
}
- (void)setKeyCombo:(ITKeyCombo *)newCombo
[playPauseButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"PlayPause"];
+ [playPauseButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"NextTrack"]) {
[nextTrackButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"NextTrack"];
+ [nextTrackButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"PrevTrack"]) {
[previousTrackButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"PrevTrack"];
+ [previousTrackButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"ShowPlayer"]) {
[showPlayerButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"ShowPlayer"];
+ [showPlayerButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"TrackInfo"]) {
[trackInfoButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"TrackInfo"];
+ [trackInfoButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"UpcomingSongs"]) {
[upcomingSongsButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"UpcomingSongs"];
+ [upcomingSongsButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"IncrementVolume"]) {
[volumeIncrementButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"IncrementVolume"];
+ [volumeIncrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"DecrementVolume"]) {
[volumeDecrementButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"DecrementVolume"];
+ [volumeDecrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"IncrementRating"]) {
[ratingIncrementButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"IncrementRating"];
+ [ratingIncrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"DecrementRating"]) {
[ratingDecrementButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"DecrementRating"];
+ [ratingDecrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"ToggleLoop"]) {
[toggleLoopButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"ToggleLoop"];
+ [toggleLoopButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
if ([df objectForKey:@"ToggleShuffle"]) {
[toggleShuffleButton setTitle:[anItem description]];
} else {
[hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"ToggleShuffle"];
+ [toggleShuffleButton setTitle:[[ITKeyCombo clearKeyCombo] description]];
}
// Check current track info buttons