X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/2d58e7c682543939c0ae261514af569f7ac51fa3..e050f5301eec251a3dd3177007037bbaef7f8fd3:/MainController.m diff --git a/MainController.m b/MainController.m index 6d7fe08..fd932be 100755 --- a/MainController.m +++ b/MainController.m @@ -1,7 +1,9 @@ #import "MainController.h" #import "MenuController.h" #import "PreferencesController.h" -#import "HotKeyCenter.h" +#import +#import +#import #import "StatusWindowController.h" #import "StatusItemHack.h" @@ -81,8 +83,8 @@ static MainController *sharedController; } } - [statusItem setImage:[NSImage imageNamed:@"menu"]]; - [statusItem setAlternateImage:[NSImage imageNamed:@"selected_image"]]; + [statusItem setImage:[NSImage imageNamed:@"MenuNormal"]]; + [statusItem setAlternateImage:[NSImage imageNamed:@"MenuInverted"]]; } - (ITMTRemote *)loadRemote @@ -140,7 +142,7 @@ static MainController *sharedController; - (BOOL)songIsPlaying { - return ( ! ([[currentRemote currentSongUniqueIdentifier] isEqualToString:@"0-0"]) ); + return ( ! ([[currentRemote playerStateUniqueIdentifier] isEqualToString:@"0-0"]) ); } - (BOOL)radioIsPlaying @@ -150,7 +152,7 @@ static MainController *sharedController; - (BOOL)songChanged { - return ( ! [[currentRemote currentSongUniqueIdentifier] isEqualToString:_latestSongIdentifier] ); + return ( ! [[currentRemote playerStateUniqueIdentifier] isEqualToString:_latestSongIdentifier] ); } - (NSString *)latestSongIdentifier @@ -172,10 +174,10 @@ static MainController *sharedController; ( (! [self radioIsPlaying]) && (latestPlaylistClass == ITMTRemotePlayerRadioPlaylist) ) )*/ if ([self songChanged]) { - [self setLatestSongIdentifier:[currentRemote currentSongUniqueIdentifier]]; + [self setLatestSongIdentifier:[currentRemote playerStateUniqueIdentifier]]; latestPlaylistClass = [currentRemote currentPlaylistClass]; [menuController rebuildSubmenus]; - + if ( [df boolForKey:@"showSongInfoOnChange"] ) { [self showCurrentTrackInfo]; } @@ -209,46 +211,64 @@ static MainController *sharedController; } else { [currentRemote play]; } + + [self timerUpdate]; } - (void)nextSong { [currentRemote goToNextSong]; + + [self timerUpdate]; } - (void)prevSong { [currentRemote goToPreviousSong]; + + [self timerUpdate]; } - (void)fastForward { [currentRemote forward]; + + [self timerUpdate]; } - (void)rewind { [currentRemote rewind]; + + [self timerUpdate]; } - (void)selectPlaylistAtIndex:(int)index { [currentRemote switchToPlaylistAtIndex:index]; + + [self timerUpdate]; } - (void)selectSongAtIndex:(int)index { [currentRemote switchToSongAtIndex:index]; + + [self timerUpdate]; } - (void)selectSongRating:(int)rating { [currentRemote setCurrentSongRating:(float)rating / 100.0]; + + [self timerUpdate]; } - (void)selectEQPresetAtIndex:(int)index { [currentRemote switchToEQAtIndex:index]; + + [self timerUpdate]; } - (void)showPlayer @@ -296,92 +316,124 @@ static MainController *sharedController; - (void)clearHotKeys { - [[HotKeyCenter sharedCenter] removeHotKey:@"PlayPause"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"NextTrack"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"PrevTrack"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"TrackInfo"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"ShowPlayer"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"UpcomingSongs"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"ToggleLoop"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"ToggleShuffle"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"IncrementVolume"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"DecrementVolume"]; - [[HotKeyCenter sharedCenter] removeHotKey:@"IncrementRating"]; - [[HotKeyCenter 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) { - [[HotKeyCenter sharedCenter] addHotKey:@"PlayPause" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"NextTrack" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"PrevTrack" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"ShowPlayer" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"TrackInfo" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"UpcomingSongs" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"ToggleLoop" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"ToggleShuffle" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"IncrementVolume" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"DecrementVolume" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"IncrementRating" - combo:[df keyComboForKey:@"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) { - [[HotKeyCenter sharedCenter] addHotKey:@"DecrementRating" - combo:[df keyComboForKey:@"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]]; } } @@ -390,12 +442,13 @@ static MainController *sharedController; NSString *title = [currentRemote currentSongTitle]; if ( title ) { - NSString *album = nil; - NSString *artist = nil; - NSString *time = nil; - int trackNumber = 0; - int trackTotal = 0; - int rating = 0; + NSString *album = nil; + NSString *artist = nil; + NSString *time = nil; + int trackNumber = 0; + int trackTotal = 0; + int rating = 0; + ITMTRemotePlayerSource source = [currentRemote currentSource]; if ( [df boolForKey:@"showAlbum"] ) { album = [currentRemote currentSongAlbum]; @@ -424,7 +477,8 @@ static MainController *sharedController; time:time trackNumber:trackNumber trackTotal:trackTotal - rating:rating]; + rating:rating + source:source]; } else { title = NSLocalizedString(@"noSongPlaying", @"No song is playing."); [statusWindowController showSongWindowWithTitle:title @@ -433,7 +487,8 @@ static MainController *sharedController; time:nil trackNumber:0 trackTotal:0 - rating:0]; + rating:0 + source:[currentRemote currentSource]]; } }