X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/9ba1419655d7d247210a4ed2e7a220ddf82d80cb..545c9e281e8ac3ce259afc85d6a554849d8efe86:/MenuController.m diff --git a/MenuController.m b/MenuController.m index f434ccc..72bee7a 100755 --- a/MenuController.m +++ b/MenuController.m @@ -7,23 +7,207 @@ // #import "MenuController.h" -#import "MainController.h" +#import "NewMainController.h" + +@interface MenuController (SubmenuMethods) +- (NSMenu *)ratingMenu; +- (NSMenu *)upcomingSongsMenu; +- (NSMenu *)playlistsMenu; +- (NSMenu *)eqMenu; +@end @implementation MenuController - (id)init { if ( (self = [super init]) ) { - _menuLayout = [[NSMutableArray alloc] initWithCapacity: + _menuLayout = [[NSMutableArray alloc] initWithCapacity:0]; } return self; } - (NSMenu *)menu { - // dynamically create menu from supplied data and layout information. - // ... - // right before returning the menu, set the created menu to instance variable _currentMenu. + NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; + NSArray *menuArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"menu"]; + NSEnumerator *enumerator = [menuArray objectEnumerator]; + NSString *nextObject; + NSMenuItem *tempItem; + + //Get the current playlist, track index, etc. + currentRemote = [[MainController sharedController] currentRemote]; + _currentPlaylist = [currentRemote currentPlaylistIndex]; + _currentTrack = [currentRemote currentSongIndex]; + _playingRadio = ([currentRemote currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist); + + //create our menu + while ( (nextObject = [enumerator nextObject]) ) { + //Main menu items + if ([nextObject isEqualToString:@"Play/Pause"]) { + tempItem = [menu addItemWithTitle:@"Play" + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + [tempItem setTag:MTMenuPlayPauseItem]; + [tempItem setTarget:self]; + + switch ([currentRemote playerPlayingState]) { + case ITMTRemotePlayerPlaying: + [tempItem setTitle:@"Pause"]; + break; + case ITMTRemotePlayerRewinding: + case ITMTRemotePlayerForwarding: + [tempItem setTitle:@"Resume"]; + break; + default: + break; + } + } else if ([nextObject isEqualToString:@"Next Track"]) { + tempItem = [menu addItemWithTitle:@"Next Track" + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + if (_currentPlaylist) { + [tempItem setTag:MTMenuNextTrackItem]; + [tempItem setTarget:self]; + } + } else if ([nextObject isEqualToString:@"Previous Track"]) { + tempItem = [menu addItemWithTitle:@"Previous Track" + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + if (_currentPlaylist) { + [tempItem setTag:MTMenuPreviousTrackItem]; + [tempItem setTarget:self]; + } + } else if ([nextObject isEqualToString:@"Fast Forward"]) { + tempItem = [menu addItemWithTitle:@"Fast Forward" + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + if (_currentPlaylist) { + [tempItem setTag:MTMenuFastForwardItem]; + [tempItem setTarget:self]; + } + } else if ([nextObject isEqualToString:@"Rewind"]) { + tempItem = [menu addItemWithTitle:@"Rewind" + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + if (_currentPlaylist) { + [tempItem setTag:MTMenuRewindItem]; + [tempItem setTarget:self]; + } + } else if ([nextObject isEqualToString:@"Preferences"]) { + tempItem = [menu addItemWithTitle:@"Preferences..." + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + [tempItem setTag:MTMenuPreferencesItem]; + [tempItem setTarget:self]; + } else if ([nextObject isEqualToString:@"Quit"]) { + tempItem = [menu addItemWithTitle:@"Quit" + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + [tempItem setTag:MTMenuQuitItem]; + [tempItem setTarget:self]; + } else if ([nextObject isEqualToString:@"Current Track Info"]) { + if (_currentPlaylist) { + NSString *title = [currentRemote currentSongTitle]; + + [menu addItemWithTitle:@"Now Playing" action:NULL keyEquivalent:@""]; + + if ([title length] > 0) { + [menu addItemWithTitle:[NSString stringWithFormat:@" %@", title] action:nil keyEquivalent:@""]; + } + //Gotta add artist, album, track, time, etc, blah, blah, blah... + } else { + [menu addItemWithTitle:@"No Song" action:NULL keyEquivalent:@""]; + } + } else if ([nextObject isEqualToString:@""]) { + [menu addItem:[NSMenuItem separatorItem]]; + //Submenu items + } else if ([nextObject isEqualToString:@"Song Rating"]) { + tempItem = [menu addItemWithTitle:@"Song Rating" + action:nil + keyEquivalent:@""]; + [tempItem setSubmenu:[self ratingMenu]]; + } else if ([nextObject isEqualToString:@"Upcoming Songs"]) { + tempItem = [menu addItemWithTitle:@"Upcoming Songs" + action:nil + keyEquivalent:@""]; + [tempItem setSubmenu:[self upcomingSongsMenu]]; + } else if ([nextObject isEqualToString:@"Playlists"]) { + tempItem = [menu addItemWithTitle:@"Playlists" + action:nil + keyEquivalent:@""]; + [tempItem setSubmenu:[self playlistsMenu]]; + } else if ([nextObject isEqualToString:@"EQ Presets"]) { + tempItem = [menu addItemWithTitle:@"EQ Presets" + action:nil + keyEquivalent:@""]; + [tempItem setSubmenu:[self eqMenu]]; + } + } + + [_currentMenu release]; + _currentMenu = menu; + return _currentMenu; +} + +- (NSMenu *)menuForNoPlayer +{ + NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; + NSMenuItem *tempItem; + tempItem = [menu addItemWithTitle:[NSString stringWithFormat:@"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 setTag:MTMenuPreferencesItem]; + [tempItem setTarget:self]; + tempItem = [menu addItemWithTitle:@"Quit" action:@selector(performMainMenuAction:) keyEquivalent:@""]; + [tempItem setTag:MTMenuQuitItem]; + [tempItem setTarget:self]; + return [menu autorelease]; +} + +- (NSMenu *)ratingMenu +{ + NSMenu *ratingMenu = [[NSMenu alloc] initWithTitle:@""]; + return [ratingMenu autorelease]; +} + +- (NSMenu *)upcomingSongsMenu +{ + NSMenu *upcomingSongsMenu = [[NSMenu alloc] initWithTitle:@""]; + int numSongs = [currentRemote numberOfSongsInPlaylistAtIndex:_currentPlaylist]; + int numSongsInAdvance = [[NSUserDefaults standardUserDefaults] integerForKey:@"SongsInAdvance"]; + + if (_currentPlaylist && !_playingRadio) { + if (numSongs > 0) { + int i; + + for (i = _currentTrack + 1; i <= _currentTrack + numSongsInAdvance; i++) { + if (i <= numSongs) { + NSString *curSong = [currentRemote songTitleAtIndex:i]; + NSMenuItem *songItem; + songItem = [upcomingSongsMenu addItemWithTitle:curSong action:@selector(performUpcomingSongsMenuAction:) keyEquivalent:@""]; + [songItem setTag:i]; + [songItem setTarget:self]; + } else { + break; + } + } + } + } + return [upcomingSongsMenu autorelease]; +} + +- (NSMenu *)playlistsMenu +{ + NSMenu *playlistsMenu = [[NSMenu alloc] initWithTitle:@""]; + return [playlistsMenu autorelease]; +} + +- (NSMenu *)eqMenu +{ + NSMenu *eqMenu = [[NSMenu alloc] initWithTitle:@""]; + return [eqMenu autorelease]; } - (void)performMainMenuAction:(id)sender @@ -53,6 +237,10 @@ NSLog(@"MenuController: Next Track"); [[MainController sharedController] nextSong]; break; + case MTMenuShowPlayerItem: + NSLog(@"MainController: Show Main Interface"); + [[MainController sharedController] showPlayer]; + break; case MTMenuPreferencesItem: NSLog(@"MenuController: Preferences..."); [[MainController sharedController] showPreferences]; @@ -79,12 +267,12 @@ - (void)performEqualizerMenuAction:(id)sender { - [[MainController sharedController] selectEQItemAtIndex:[sender tag]] + [[MainController sharedController] selectEQPresetAtIndex:[sender tag]]; } - (void)performUpcomingSongsMenuAction:(id)sender { - [[MainController sharedController] selectSongAtIndex:[sender tag]] + [[MainController sharedController] selectSongAtIndex:[sender tag]]; } - (void)updateMenu @@ -95,6 +283,7 @@ - (BOOL)validateMenuItem:(id )menuItem { + return YES; } - (NSString *)systemUIColor @@ -103,7 +292,7 @@ NSNumber *tmpNumber; if ( (tmpDict = [NSDictionary dictionaryWithContentsOfFile:[@"~/Library/Preferences/.GlobalPreferences.plist" stringByExpandingTildeInPath]]) ) { if ( (tmpNumber = [tmpDict objectForKey:@"AppleAquaColorVariant"]) ) { - if ( ([tmpNumber intValue == 1) ) { + if ( ([tmpNumber intValue] == 1) ) { return @"Aqua"; } else { return @"Graphite"; @@ -152,6 +341,7 @@ case 49: { // Haven't tested this, though it should work. + // This doesn't work. :'( unichar buffer; [[NSString stringWithString:@"Space"] getCharacters:&buffer]; charcode = buffer;