X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/9e81b116e66a0bff8ef8fe6b242f7f589f8f02ca..b3c2ee58062172cc83fb7ad97596769b840b76ad:/MenuController.m diff --git a/MenuController.m b/MenuController.m index 2ac4826..94746f4 100755 --- a/MenuController.m +++ b/MenuController.m @@ -7,9 +7,12 @@ // #import "MenuController.h" -#import "NewMainController.h" -#import "HotKeyCenter.h" -#import "KeyCombo.h" +#import "MainController.h" +#import +#import +#import +#import +#import @interface MenuController (SubmenuMethods) - (NSMenu *)ratingMenu; @@ -39,7 +42,8 @@ NSString *nextObject; NSMenuItem *tempItem; NSEnumerator *itemEnum; - KeyCombo *keyCombo; + ITHotKey *hotKey; + NSArray *hotKeys = [[ITHotKeyCenter sharedCenter] allHotKeys]; //Get the information _currentPlaylist = [currentRemote currentPlaylistIndex]; @@ -62,20 +66,27 @@ [tempItem setSubmenu:nil]; } + ITDebugLog(@"Begin building menu."); + //create our menu while ( (nextObject = [enumerator nextObject]) ) { //Main menu items if ([nextObject isEqualToString:@"playPause"]) { + ITDebugLog(@"Add play/pause menu item."); 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]; + itemEnum = [hotKeys objectEnumerator]; + while ( (hotKey = [itemEnum nextObject]) ) { + if ([[hotKey name] isEqualToString:@"PlayPause"]) { + ITKeyCombo *combo = [hotKey keyCombo]; + [self setKeyEquivalentForCode:[combo keyCode] + andModifiers:[combo modifiers] + onItem:tempItem]; + } } switch ([currentRemote playerPlayingState]) { @@ -90,14 +101,19 @@ break; } } else if ([nextObject isEqualToString:@"nextTrack"]) { + ITDebugLog(@"Add next track menu item."); 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]; + itemEnum = [hotKeys objectEnumerator]; + while ( (hotKey = [itemEnum nextObject]) ) { + if ([[hotKey name] isEqualToString:@"NextTrack"]) { + ITKeyCombo *combo = [hotKey keyCombo]; + [self setKeyEquivalentForCode:[combo keyCode] + andModifiers:[combo modifiers] + onItem:tempItem]; + } } if (_currentPlaylist) { @@ -105,14 +121,19 @@ [tempItem setTarget:self]; } } else if ([nextObject isEqualToString:@"prevTrack"]) { + ITDebugLog(@"Add previous track menu item."); 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]; + itemEnum = [hotKeys objectEnumerator]; + while ( (hotKey = [itemEnum nextObject]) ) { + if ([[hotKey name] isEqualToString:@"PrevTrack"]) { + ITKeyCombo *combo = [hotKey keyCombo]; + [self setKeyEquivalentForCode:[combo keyCode] + andModifiers:[combo modifiers] + onItem:tempItem]; + } } if (_currentPlaylist) { @@ -120,6 +141,7 @@ [tempItem setTarget:self]; } } else if ([nextObject isEqualToString:@"fastForward"]) { + ITDebugLog(@"Add fast forward menu item."); tempItem = [menu addItemWithTitle:NSLocalizedString(@"fastForward", @"Fast Forward") action:@selector(performMainMenuAction:) keyEquivalent:@""]; @@ -128,6 +150,7 @@ [tempItem setTarget:self]; } } else if ([nextObject isEqualToString:@"rewind"]) { + ITDebugLog(@"Add rewind menu item."); tempItem = [menu addItemWithTitle:NSLocalizedString(@"rewind", @"Rewind") action:@selector(performMainMenuAction:) keyEquivalent:@""]; @@ -136,21 +159,27 @@ [tempItem setTarget:self]; } } else if ([nextObject isEqualToString:@"showPlayer"]) { + ITDebugLog(@"Add show player menu item."); 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]; + itemEnum = [hotKeys objectEnumerator]; + while ( (hotKey = [itemEnum nextObject]) ) { + if ([[hotKey name] isEqualToString:@"ShowPlayer"]) { + ITKeyCombo *combo = [hotKey keyCombo]; + [self setKeyEquivalentForCode:[combo keyCode] + andModifiers:[combo modifiers] + onItem:tempItem]; + } } [tempItem setTarget:self]; [tempItem setTag:MTMenuShowPlayerItem]; } else if ([nextObject isEqualToString:@"preferences"]) { + ITDebugLog(@"Add preferences menu item."); tempItem = [menu addItemWithTitle:NSLocalizedString(@"preferences", @"Preferences...") action:@selector(performMainMenuAction:) keyEquivalent:@""]; @@ -163,6 +192,7 @@ [tempItem setTag:MTMenuQuitItem]; [tempItem setTarget:self]; } else if ([nextObject isEqualToString:@"trackInfo"]) { + ITDebugLog(@"Add track info menu items."); //Handle playing radio too if (_currentPlaylist) { NSString *title = [currentRemote currentSongTitle]; @@ -170,52 +200,73 @@ [menu addItemWithTitle:NSLocalizedString(@"nowPlaying", @"Now Playing") action:NULL keyEquivalent:@""]; if ([title length] > 0) { - [menu addItemWithTitle:[NSString stringWithFormat:@" %@", title] - action:nil - keyEquivalent:@""]; + [menu indentItem: + [menu addItemWithTitle:title action:nil keyEquivalent:@""]]; } if ([defaults boolForKey:@"showAlbum"]) { NSString *curAlbum = [currentRemote currentSongAlbum]; if ([curAlbum length]) { - [menu addItemWithTitle:[NSString stringWithFormat:@" %@", curAlbum] - action:nil - keyEquivalent:@""]; + [menu indentItem: + [menu addItemWithTitle:curAlbum action:nil keyEquivalent:@""]]; } } if ([defaults boolForKey:@"showArtist"]) { NSString *curArtist = [currentRemote currentSongArtist]; if ([curArtist length]) { - [menu addItemWithTitle:[NSString stringWithFormat:@" %@", curArtist] - action:nil - keyEquivalent:@""]; + [menu indentItem: + [menu addItemWithTitle:curArtist 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:@""]; + [menu indentItem: + [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:@""]; + [menu indentItem:[menu addItemWithTitle:[NSString stringWithFormat:@"%@/%@", remaining, [currentRemote currentSongLength]] action:nil keyEquivalent:@""]]; + } + + if ([defaults boolForKey:@"showTrackRating"]) { + NSString *string = nil; + switch ((int)([currentRemote currentSongRating] * 5)) { + case 0: + string = [NSString stringWithUTF8String:"☆☆☆☆☆"]; + break; + case 1: + string = [NSString stringWithUTF8String:"★☆☆☆☆"]; + break; + case 2: + string = [NSString stringWithUTF8String:"★★☆☆☆"]; + break; + case 3: + string = [NSString stringWithUTF8String:"★★★☆☆"]; + break; + case 4: + string = [NSString stringWithUTF8String:"★★★★☆"]; + break; + case 5: + string = [NSString stringWithUTF8String:"★★★★★"]; + break; + } + [menu indentItem:[menu addItemWithTitle:string action:nil keyEquivalent:@""]]; } } else { [menu addItemWithTitle:NSLocalizedString(@"noSong", @"No Song") action:NULL keyEquivalent:@""]; } } else if ([nextObject isEqualToString:@"separator"]) { + ITDebugLog(@"Add separator menu item."); [menu addItem:[NSMenuItem separatorItem]]; //Submenu items } else if ([nextObject isEqualToString:@"songRating"]) { + ITDebugLog(@"Add song rating menu item."); tempItem = [menu addItemWithTitle:NSLocalizedString(@"songRating", @"Song Rating") action:nil keyEquivalent:@""]; @@ -232,6 +283,7 @@ [[_ratingMenu itemAtIndex:([currentRemote currentSongRating] * 5)] setState:NSOnState]; } else if ([nextObject isEqualToString:@"upcomingSongs"]) { + ITDebugLog(@"Add upcoming songs menu item."); tempItem = [menu addItemWithTitle:NSLocalizedString(@"upcomingSongs", @"Upcoming Songs") action:nil keyEquivalent:@""]; @@ -247,6 +299,7 @@ [tempItem setSubmenu:_playlistsMenu]; [tempItem setTag:3]; } else if ([nextObject isEqualToString:@"eqPresets"]) { + ITDebugLog(@"Add eq presets menu item."); tempItem = [menu addItemWithTitle:NSLocalizedString(@"eqPresets", @"EQ Presets") action:nil keyEquivalent:@""]; @@ -260,6 +313,7 @@ [[_eqMenu itemAtIndex:([currentRemote currentEQPresetIndex] - 1)] setState:NSOnState]; } } + ITDebugLog(@"Finished building menu."); [_currentMenu release]; _currentMenu = menu; return _currentMenu; @@ -307,6 +361,8 @@ int itemTag = 0; SEL itemSelector = @selector(performRatingMenuAction:); + ITDebugLog(@"Building rating menu."); + [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"☆☆☆☆☆"] action:nil keyEquivalent:@""]; [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★☆☆☆☆"] action:nil keyEquivalent:@""]; [ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★☆☆☆"] action:nil keyEquivalent:@""]; @@ -330,6 +386,8 @@ int numSongs = [currentRemote numberOfSongsInPlaylistAtIndex:_currentPlaylist]; int numSongsInAdvance = [[NSUserDefaults standardUserDefaults] integerForKey:@"SongsInAdvance"]; + ITDebugLog(@"Building upcoming songs menu."); + if (_currentPlaylist && !_playingRadio) { if (numSongs > 0) { int i; @@ -357,6 +415,8 @@ NSMenuItem *tempItem; int i; + ITDebugLog(@"Building playlists menu."); + for (i = 0; i < [playlists count]; i++) { tempItem = [playlistsMenu addItemWithTitle:[playlists objectAtIndex:i] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""]; [tempItem setTag:i + 1]; @@ -376,6 +436,8 @@ NSMenuItem *tempItem; int i; + ITDebugLog(@"Building EQ presets menu."); + for (i = 0; i < [eqPresets count]; i++) { NSString *name; if ( ( name = [eqPresets objectAtIndex:i] ) ) { @@ -392,39 +454,39 @@ switch ( [sender tag] ) { case MTMenuPlayPauseItem: - NSLog(@"MenuController: Play/Pause"); + ITDebugLog(@"MenuController: Play/Pause"); [[MainController sharedController] playPause]; break; case MTMenuFastForwardItem: - NSLog(@"MenuController: Fast Forward"); + ITDebugLog(@"MenuController: Fast Forward"); [[MainController sharedController] fastForward]; break; case MTMenuRewindItem: - NSLog(@"MenuController: Rewind"); + ITDebugLog(@"MenuController: Rewind"); [[MainController sharedController] rewind]; break; case MTMenuPreviousTrackItem: - NSLog(@"MenuController: Previous Track"); + ITDebugLog(@"MenuController: Previous Track"); [[MainController sharedController] prevSong]; break; case MTMenuNextTrackItem: - NSLog(@"MenuController: Next Track"); + ITDebugLog(@"MenuController: Next Track"); [[MainController sharedController] nextSong]; break; case MTMenuShowPlayerItem: - NSLog(@"MainController: Show Main Interface"); + ITDebugLog(@"MainController: Show Main Interface"); [[MainController sharedController] showPlayer]; break; case MTMenuPreferencesItem: - NSLog(@"MenuController: Preferences..."); + ITDebugLog(@"MenuController: Preferences..."); [[MainController sharedController] showPreferences]; break; case MTMenuQuitItem: - NSLog(@"MenuController: Quit"); + ITDebugLog(@"MenuController: Quit"); [[MainController sharedController] quitMenuTunes]; break; default: - NSLog(@"MenuController: Unimplemented Menu Item OR Child-bearing Menu Item"); + ITDebugLog(@"MenuController: Unimplemented Menu Item OR Child-bearing Menu Item"); break; } } @@ -520,7 +582,7 @@ [[NSString stringWithString:@"Space"] getCharacters:&buffer]; charcode = buffer; /*MenuRef menuRef = _NSGetCarbonMenu([item menu]); - NSLog(@"%@", menuRef); + ITDebugLog(@"%@", menuRef); SetMenuItemCommandKey(menuRef, 0, NO, 49); SetMenuItemModifiers(menuRef, 0, kMenuNoCommandModifier); SetMenuItemKeyGlyph(menuRef, 0, kMenuBlankGlyph);