#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 information
_currentPlaylist = [currentRemote currentPlaylistIndex];
[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 = [menu addItemWithTitle:@"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];
tempItem = [menu addItemWithTitle:@"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];
[menu addItemWithTitle:@"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"]) {
+ [menu addItemWithTitle:[NSString stringWithFormat:@" Track %i", [currentRemote currentSongTrack]]
+ 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:@""];
}
keyEquivalent:@""];
[tempItem setSubmenu:_ratingMenu];
[tempItem setTag:1];
+
+ itemEnum = [[_ratingMenu itemArray] objectEnumerator];
+ while ( (tempItem = [itemEnum nextObject]) ) {
+ [tempItem setState:NSOffState];
+ }
+
+ [[_ratingMenu itemAtIndex:([currentRemote currentSongRating] * 5)] setState:NSOnState];
if (_playingRadio || !_currentPlaylist) {
[tempItem setEnabled:NO];
}
keyEquivalent:@""];
[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];
[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];
[tempItem setTarget:self];
}
}
- [[eqMenu itemAtIndex:([currentRemote currentEQPresetIndex] - 1)] setState:NSOnState];
return eqMenu;
}
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");