#import "MenuController.h"
#import "NewMainController.h"
+#import "HotKeyCenter.h"
+#import "KeyCombo.h"
@interface MenuController (SubmenuMethods)
- (NSMenu *)ratingMenu;
- (NSMenu *)upcomingSongsMenu;
- (NSMenu *)playlistsMenu;
- (NSMenu *)eqMenu;
+- (void)setKeyEquivalentForCode:(short)code andModifiers:(long)modifiers
+ onItem:(NSMenuItem *)item;
@end
@implementation MenuController
- (NSMenu *)menu
{
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
- NSArray *menuArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"menu"];
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ NSArray *menuArray = [defaults arrayForKey:@"menu"];
NSEnumerator *enumerator = [menuArray objectEnumerator];
NSString *nextObject;
NSMenuItem *tempItem;
+ NSEnumerator *itemEnum;
+ KeyCombo *keyCombo;
- //Get the current playlist, track index, etc.
- currentRemote = [[MainController sharedController] currentRemote];
+ //Get the information
_currentPlaylist = [currentRemote currentPlaylistIndex];
- _currentTrack = [currentRemote currentSongIndex];
_playingRadio = ([currentRemote currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist);
+ //Kill the old submenu items
+ if ( (tempItem = [_currentMenu itemWithTag:1]) ) {
+ [tempItem setSubmenu:nil];
+ }
+
+ if ( (tempItem = [_currentMenu itemWithTag:2]) ) {
+ [tempItem setSubmenu:nil];
+ }
+
+ if ( (tempItem = [_currentMenu itemWithTag:3]) ) {
+ [tempItem setSubmenu:nil];
+ }
+
+ if ( (tempItem = [_currentMenu itemWithTag:4]) ) {
+ [tempItem setSubmenu:nil];
+ }
+
//create our menu
while ( (nextObject = [enumerator nextObject]) ) {
//Main menu items
- if ([nextObject isEqualToString:@"Play/Pause"]) {
- tempItem = [menu addItemWithTitle:@"Play"
+ if ([nextObject isEqualToString:@"playPause"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"play", @"Play")
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
[tempItem setTag:MTMenuPlayPauseItem];
[tempItem setTarget:self];
+ if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"PlayPause"]) ) {
+ [self setKeyEquivalentForCode:[keyCombo keyCode]
+ andModifiers:[keyCombo modifiers]
+ onItem:tempItem];
+ }
+
switch ([currentRemote playerPlayingState]) {
case ITMTRemotePlayerPlaying:
- [tempItem setTitle:@"Pause"];
+ [tempItem setTitle:NSLocalizedString(@"pause", @"Pause")];
break;
case ITMTRemotePlayerRewinding:
case ITMTRemotePlayerForwarding:
- [tempItem setTitle:@"Resume"];
+ [tempItem setTitle:NSLocalizedString(@"resume", @"Resume")];
break;
default:
break;
}
- } else if ([nextObject isEqualToString:@"Next Track"]) {
- tempItem = [menu addItemWithTitle:@"Next Track"
+ } else if ([nextObject isEqualToString:@"nextTrack"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"nextTrack", @"Next Track")
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
+
+ if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"NextTrack"]) ) {
+ [self setKeyEquivalentForCode:[keyCombo keyCode]
+ andModifiers:[keyCombo modifiers]
+ onItem:tempItem];
+ }
+
if (_currentPlaylist) {
[tempItem setTag:MTMenuNextTrackItem];
[tempItem setTarget:self];
}
- } else if ([nextObject isEqualToString:@"Previous Track"]) {
- tempItem = [menu addItemWithTitle:@"Previous Track"
+ } else if ([nextObject isEqualToString:@"prevTrack"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"prevTrack", @"Previous Track")
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
+
+ if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"PrevTrack"]) ) {
+ [self setKeyEquivalentForCode:[keyCombo keyCode]
+ andModifiers:[keyCombo modifiers]
+ onItem:tempItem];
+ }
+
if (_currentPlaylist) {
[tempItem setTag:MTMenuPreviousTrackItem];
[tempItem setTarget:self];
}
- } else if ([nextObject isEqualToString:@"Fast Forward"]) {
- tempItem = [menu addItemWithTitle:@"Fast Forward"
+ } else if ([nextObject isEqualToString:@"fastForward"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"fastForward", @"Fast Forward")
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
if (_currentPlaylist) {
[tempItem setTag:MTMenuFastForwardItem];
[tempItem setTarget:self];
}
- } else if ([nextObject isEqualToString:@"Rewind"]) {
- tempItem = [menu addItemWithTitle:@"Rewind"
+ } else if ([nextObject isEqualToString:@"rewind"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"rewind", @"Rewind")
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
if (_currentPlaylist) {
[tempItem setTag:MTMenuRewindItem];
[tempItem setTarget:self];
}
- } else if ([nextObject isEqualToString:@"Preferences"]) {
- tempItem = [menu addItemWithTitle:@"Preferences..."
+ } else if ([nextObject isEqualToString:@"showPlayer"]) {
+ tempItem = [menu addItemWithTitle:[NSString stringWithFormat:@"%@ %@",
+ NSLocalizedString(@"show", @"Show"),
+ [[[MainController sharedController] currentRemote] playerSimpleName]]
+ action:@selector(performMainMenuAction:)
+ keyEquivalent:@""];
+
+ if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"ShowPlayer"]) ) {
+ [self setKeyEquivalentForCode:[keyCombo keyCode]
+ andModifiers:[keyCombo modifiers]
+ onItem:tempItem];
+ }
+
+ [tempItem setTarget:self];
+ [tempItem setTag:MTMenuShowPlayerItem];
+ } else if ([nextObject isEqualToString:@"preferences"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"preferences", @"Preferences...")
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
[tempItem setTag:MTMenuPreferencesItem];
[tempItem setTarget:self];
- } else if ([nextObject isEqualToString:@"Quit"]) {
- tempItem = [menu addItemWithTitle:@"Quit"
+ } else if ([nextObject isEqualToString:@"quit"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"quit", @"Quit")
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
[tempItem setTag:MTMenuQuitItem];
[tempItem setTarget:self];
- } else if ([nextObject isEqualToString:@"Current Track Info"]) {
+ } else if ([nextObject isEqualToString:@"trackInfo"]) {
//Handle playing radio too
if (_currentPlaylist) {
NSString *title = [currentRemote currentSongTitle];
- [menu addItemWithTitle:@"Now Playing" action:NULL keyEquivalent:@""];
+ [menu addItemWithTitle:NSLocalizedString(@"nowPlaying", @"Now Playing") action:NULL keyEquivalent:@""];
if ([title length] > 0) {
- [menu addItemWithTitle:[NSString stringWithFormat:@" %@", title] action:nil keyEquivalent:@""];
+ [menu addItemWithTitle:[NSString stringWithFormat:@" %@", title]
+ action:nil
+ keyEquivalent:@""];
+ }
+
+ if ([defaults boolForKey:@"showAlbum"]) {
+ [menu addItemWithTitle:[NSString stringWithFormat:@" %@", [currentRemote currentSongAlbum]]
+ action:nil
+ keyEquivalent:@""];
+ }
+
+ if ([defaults boolForKey:@"showArtist"]) {
+ [menu addItemWithTitle:[NSString stringWithFormat:@" %@", [currentRemote currentSongArtist]]
+ action:nil
+ keyEquivalent:@""];
+ }
+
+ if ([defaults boolForKey:@"showTrackNumber"]) {
+ int track = [currentRemote currentSongTrack];
+ if (track) {
+ [menu addItemWithTitle:[NSString stringWithFormat:@" %@ %i", NSLocalizedString(@"track", @"Track"), track]
+ action:nil
+ keyEquivalent:@""];
+ }
+ }
+
+ if ([defaults boolForKey:@"showTime"]) {
+ int left = [[currentRemote currentSongRemaining] intValue];
+ NSString *remaining = [NSString stringWithFormat:@"%i:%02i", left / 60, left % 60];
+ [menu addItemWithTitle:[NSString stringWithFormat:@" %@/%@", remaining, [currentRemote currentSongLength]]
+ action:nil
+ keyEquivalent:@""];
}
- //Gotta add artist, album, track, time, etc, blah, blah, blah...
} else {
- [menu addItemWithTitle:@"No Song" action:NULL keyEquivalent:@""];
+ [menu addItemWithTitle:NSLocalizedString(@"noSong", @"No Song") action:NULL keyEquivalent:@""];
}
- } else if ([nextObject isEqualToString:@"<separator>"]) {
+ } else if ([nextObject isEqualToString:@"separator"]) {
[menu addItem:[NSMenuItem separatorItem]];
//Submenu items
- } else if ([nextObject isEqualToString:@"Song Rating"]) {
- tempItem = [menu addItemWithTitle:@"Song Rating"
+ } else if ([nextObject isEqualToString:@"songRating"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"songRating", @"Song Rating")
action:nil
keyEquivalent:@""];
- [tempItem setSubmenu:[self ratingMenu]];
+ [tempItem setSubmenu:_ratingMenu];
+ [tempItem setTag:1];
if (_playingRadio || !_currentPlaylist) {
[tempItem setEnabled:NO];
}
- } else if ([nextObject isEqualToString:@"Upcoming Songs"]) {
- tempItem = [menu addItemWithTitle:@"Upcoming Songs"
+
+ itemEnum = [[_ratingMenu itemArray] objectEnumerator];
+ while ( (tempItem = [itemEnum nextObject]) ) {
+ [tempItem setState:NSOffState];
+ }
+
+ [[_ratingMenu itemAtIndex:([currentRemote currentSongRating] * 5)] setState:NSOnState];
+ } else if ([nextObject isEqualToString:@"upcomingSongs"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"upcomingSongs", @"Upcoming Songs")
action:nil
keyEquivalent:@""];
- [tempItem setSubmenu:[self upcomingSongsMenu]];
+ [tempItem setSubmenu:_upcomingSongsMenu];
+ [tempItem setTag:2];
if (_playingRadio || !_currentPlaylist) {
[tempItem setEnabled:NO];
}
- } else if ([nextObject isEqualToString:@"Playlists"]) {
- tempItem = [menu addItemWithTitle:@"Playlists"
+ } else if ([nextObject isEqualToString:@"playlists"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"playlists", @"Playlists")
action:nil
keyEquivalent:@""];
- [tempItem setSubmenu:[self playlistsMenu]];
- } else if ([nextObject isEqualToString:@"EQ Presets"]) {
- tempItem = [menu addItemWithTitle:@"EQ Presets"
+ [tempItem setSubmenu:_playlistsMenu];
+ [tempItem setTag:3];
+ } else if ([nextObject isEqualToString:@"eqPresets"]) {
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"eqPresets", @"EQ Presets")
action:nil
keyEquivalent:@""];
- [tempItem setSubmenu:[self eqMenu]];
+ [tempItem setSubmenu:_eqMenu];
+ [tempItem setTag:4];
+
+ itemEnum = [[_eqMenu itemArray] objectEnumerator];
+ while ( (tempItem = [itemEnum nextObject]) ) {
+ [tempItem setState:NSOffState];
+ }
+ [[_eqMenu itemAtIndex:([currentRemote currentEQPresetIndex] - 1)] setState:NSOnState];
}
}
-
[_currentMenu release];
_currentMenu = menu;
return _currentMenu;
{
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
NSMenuItem *tempItem;
- tempItem = [menu addItemWithTitle:[NSString stringWithFormat:@"Open %@", [[[MainController sharedController] currentRemote] playerSimpleName]] action:@selector(performMainMenuAction:) keyEquivalent:@""];
+ tempItem = [menu addItemWithTitle:[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"open", @"Open"), [[[MainController sharedController] currentRemote] playerSimpleName]] action:@selector(performMainMenuAction:) keyEquivalent:@""];
[tempItem setTag:MTMenuShowPlayerItem];
[tempItem setTarget:self];
[menu addItem:[NSMenuItem separatorItem]];
- tempItem = [menu addItemWithTitle:@"Preferences" action:@selector(performMainMenuAction:) keyEquivalent:@""];
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"preferences", @"Preferences...") action:@selector(performMainMenuAction:) keyEquivalent:@""];
[tempItem setTag:MTMenuPreferencesItem];
[tempItem setTarget:self];
- tempItem = [menu addItemWithTitle:@"Quit" action:@selector(performMainMenuAction:) keyEquivalent:@""];
+ tempItem = [menu addItemWithTitle:NSLocalizedString(@"quit", @"Quit") action:@selector(performMainMenuAction:) keyEquivalent:@""];
[tempItem setTag:MTMenuQuitItem];
[tempItem setTarget:self];
return [menu autorelease];
}
+- (void)rebuildSubmenus
+{
+ currentRemote = [[MainController sharedController] currentRemote];
+ _currentPlaylist = [currentRemote currentPlaylistIndex];
+ _currentTrack = [currentRemote currentSongIndex];
+ _playingRadio = ([currentRemote currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist);
+
+ [_ratingMenu release];
+ [_upcomingSongsMenu release];
+ [_playlistsMenu release];
+ [_eqMenu release];
+ _ratingMenu = [self ratingMenu];
+ _upcomingSongsMenu = [self upcomingSongsMenu];
+ _playlistsMenu = [self playlistsMenu];
+ _eqMenu = [self eqMenu];
+}
+
- (NSMenu *)ratingMenu
{
NSMenu *ratingMenu = [[NSMenu alloc] initWithTitle:@""];
+ NSEnumerator *itemEnum;
+ id anItem;
+ int itemTag = 0;
+ SEL itemSelector = @selector(performRatingMenuAction:);
- if (_currentPlaylist && !_playingRadio) {
- NSEnumerator *itemEnum;
- id anItem;
- int itemTag = 0;
- SEL itemSelector = @selector(performRatingMenuAction:);
-
- [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"☆☆☆☆☆"] action:nil keyEquivalent:@""];
- [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★☆☆☆☆"] action:nil keyEquivalent:@""];
- [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★☆☆☆"] action:nil keyEquivalent:@""];
- [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★☆☆"] action:nil keyEquivalent:@""];
- [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★★☆"] action:nil keyEquivalent:@""];
- [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★★★"] action:nil keyEquivalent:@""];
-
- [[ratingMenu itemAtIndex:([currentRemote currentSongRating] * 5)] setState:NSOnState];
-
- itemEnum = [[ratingMenu itemArray] objectEnumerator];
- while ( (anItem = [itemEnum nextObject]) ) {
- [anItem setAction:itemSelector];
- [anItem setTarget:self];
- [anItem setTag:itemTag];
- itemTag += 20;
- }
- }
+ [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"☆☆☆☆☆"] action:nil keyEquivalent:@""];
+ [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★☆☆☆☆"] action:nil keyEquivalent:@""];
+ [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★☆☆☆"] action:nil keyEquivalent:@""];
+ [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★☆☆"] action:nil keyEquivalent:@""];
+ [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★★☆"] action:nil keyEquivalent:@""];
+ [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★★★"] action:nil keyEquivalent:@""];
- return [ratingMenu autorelease];
+ itemEnum = [[ratingMenu itemArray] objectEnumerator];
+ while ( (anItem = [itemEnum nextObject]) ) {
+ [anItem setAction:itemSelector];
+ [anItem setTarget:self];
+ [anItem setTag:itemTag];
+ itemTag += 20;
+ }
+ return ratingMenu;
}
- (NSMenu *)upcomingSongsMenu
}
}
}
- return [upcomingSongsMenu autorelease];
+ return upcomingSongsMenu;
}
- (NSMenu *)playlistsMenu
if (!_playingRadio && _currentPlaylist) {
[[playlistsMenu itemAtIndex:_currentPlaylist - 1] setState:NSOnState];
}
- return [playlistsMenu autorelease];
+ return playlistsMenu;
}
- (NSMenu *)eqMenu
[tempItem setTarget:self];
}
}
- [[eqMenu itemAtIndex:([currentRemote currentEQPresetIndex] - 1)] setState:NSOnState];
- return [eqMenu autorelease];
+ return eqMenu;
}
- (void)performMainMenuAction:(id)sender
case MTMenuPlayPauseItem:
NSLog(@"MenuController: Play/Pause");
[[MainController sharedController] playPause];
- //We're gonna have to change the Play menu item to Pause here too.
break;
case MTMenuFastForwardItem:
NSLog(@"MenuController: Fast Forward");
[[MainController sharedController] fastForward];
- //make sure play/pause item says sane through this
break;
case MTMenuRewindItem:
NSLog(@"MenuController: Rewind");
[[MainController sharedController] rewind];
- //make sure play/pause item says sane through this
break;
case MTMenuPreviousTrackItem:
NSLog(@"MenuController: Previous Track");
}
}
-@end
+@end
\ No newline at end of file