X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/0ab2d6bec7f56617e1c7ed073168753d48d1707e..fdafd4ab39c062a3d5854f1c047f53108e42218e:/MenuController.m diff --git a/MenuController.m b/MenuController.m index 0ac43d1..cd30070 100755 --- a/MenuController.m +++ b/MenuController.m @@ -7,23 +7,78 @@ // #import "MenuController.h" - +#import "NewMainController.h" +#import "ITMTRemote.h" @implementation MenuController - (id)init { if ( (self = [super init]) ) { - _menuLayout = [[NSMutableArray alloc] initWithCapacity: + _menuLayout = [[NSMutableArray alloc] initWithCapacity:0]; } return self; } - (NSMenu *)menu { + NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; + NSArray *menuArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"menu"]; + NSEnumerator *enumerator = [menuArray objectEnumerator]; + NSString *nextObject; + ITMTRemote *currentRemote = [[MainController sharedController] currentRemote]; + NSMenuItem *tempItem; + + //Get the current playlist, track index, etc. + int playlistIndex = [currentRemote currentPlaylistIndex]; + int trackIndex = [currentRemote currentSongIndex]; + // dynamically create menu from supplied data and layout information. - // ... - // right before returning the menu, set the created menu to instance variable _currentMenu. + while ( (nextObject = [enumerator nextObject]) ) { + 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:@""]; + [tempItem setTag:MTMenuNextTrackItem]; + [tempItem setTarget:self]; + } else if ([nextObject isEqualToString:@"Previous Track"]) { + tempItem = [menu addItemWithTitle:@"Previous Track" + action:@selector(performMainMenuAction:) + keyEquivalent:@""]; + [tempItem setTag:MTMenuPreviousTrackItem]; + [tempItem setTarget:self]; + } else if ([nextObject isEqualToString:@"Current Track Info"]) { + NSString *title = [currentRemote currentSongTitle]; + [menu addItemWithTitle:@"Now Playing" action:NULL keyEquivalent:@""]; + + if ([title length] > 0) { + [menu addItemWithTitle:[NSString stringWithFormat:@" %@", title] action:nil keyEquivalent:@""]; + } + } + //Do cool stuff here woo hehe gack yay! 0_o + } + + [_currentMenu release]; + _currentMenu = menu; + return _currentMenu; } - (void)performMainMenuAction:(id)sender @@ -32,24 +87,34 @@ { 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"); + [[MainController sharedController] prevSong]; break; case MTMenuNextTrackItem: NSLog(@"MenuController: Next Track"); + [[MainController sharedController] nextSong]; break; case MTMenuPreferencesItem: NSLog(@"MenuController: Preferences..."); + [[MainController sharedController] showPreferences]; break; case MTMenuQuitItem: NSLog(@"MenuController: Quit"); + [[MainController sharedController] quitMenuTunes]; break; default: NSLog(@"MenuController: Unimplemented Menu Item OR Child-bearing Menu Item"); @@ -57,20 +122,24 @@ } } -- (void)performRatingMenuAction +- (void)performRatingMenuAction:(id)sender { + [[MainController sharedController] selectSongRating:[sender tag]]; } -- (void)performPlaylistMenuAction +- (void)performPlaylistMenuAction:(id)sender { + [[MainController sharedController] selectPlaylistAtIndex:[sender tag]]; } -- (void)performEqualizerMenuAction +- (void)performEqualizerMenuAction:(id)sender { + [[MainController sharedController] selectEQPresetAtIndex:[sender tag]]; } -- (void)performUpcomingSongsMenuAction +- (void)performUpcomingSongsMenuAction:(id)sender { + [[MainController sharedController] selectSongAtIndex:[sender tag]]; } - (void)updateMenu @@ -81,6 +150,7 @@ - (BOOL)validateMenuItem:(id )menuItem { + return YES; } - (NSString *)systemUIColor @@ -89,7 +159,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"; @@ -102,4 +172,185 @@ } } +- (void)setKeyEquivalentForCode:(short)code andModifiers:(long)modifiers + onItem:(NSMenuItem *)item +{ + unichar charcode = 'a'; + int i; + long cocoaModifiers = 0; + static long carbonToCocoa[6][2] = + { + { cmdKey, NSCommandKeyMask }, + { optionKey, NSAlternateKeyMask }, + { controlKey, NSControlKeyMask }, + { shiftKey, NSShiftKeyMask }, + }; + + for (i = 0; i < 6; i++) { + if (modifiers & carbonToCocoa[i][0]) { + cocoaModifiers += carbonToCocoa[i][1]; + } + } + [item setKeyEquivalentModifierMask:cocoaModifiers]; + + //Missing key combos for some keys. Must find them later. + switch (code) + { + case 36: + charcode = '\r'; + break; + + case 48: + charcode = '\t'; + break; + + //Space -- ARGH! + case 49: + { + // Haven't tested this, though it should work. + unichar buffer; + [[NSString stringWithString:@"Space"] getCharacters:&buffer]; + charcode = buffer; + /*MenuRef menuRef = _NSGetCarbonMenu([item menu]); + NSLog(@"%@", menuRef); + SetMenuItemCommandKey(menuRef, 0, NO, 49); + SetMenuItemModifiers(menuRef, 0, kMenuNoCommandModifier); + SetMenuItemKeyGlyph(menuRef, 0, kMenuBlankGlyph); + charcode = 'b';*/ + + } + break; + + case 51: + charcode = NSDeleteFunctionKey; + break; + + case 53: + charcode = '\e'; + break; + + case 71: + charcode = '\e'; + break; + + case 76: + charcode = '\r'; + break; + + case 96: + charcode = NSF5FunctionKey; + break; + + case 97: + charcode = NSF6FunctionKey; + break; + + case 98: + charcode = NSF7FunctionKey; + break; + + case 99: + charcode = NSF3FunctionKey; + break; + + case 100: + charcode = NSF8FunctionKey; + break; + + case 101: + charcode = NSF9FunctionKey; + break; + + case 103: + charcode = NSF11FunctionKey; + break; + + case 105: + charcode = NSF3FunctionKey; + break; + + case 107: + charcode = NSF14FunctionKey; + break; + + case 109: + charcode = NSF10FunctionKey; + break; + + case 111: + charcode = NSF12FunctionKey; + break; + + case 113: + charcode = NSF13FunctionKey; + break; + + case 114: + charcode = NSInsertFunctionKey; + break; + + case 115: + charcode = NSHomeFunctionKey; + break; + + case 116: + charcode = NSPageUpFunctionKey; + break; + + case 117: + charcode = NSDeleteFunctionKey; + break; + + case 118: + charcode = NSF4FunctionKey; + break; + + case 119: + charcode = NSEndFunctionKey; + break; + + case 120: + charcode = NSF2FunctionKey; + break; + + case 121: + charcode = NSPageDownFunctionKey; + break; + + case 122: + charcode = NSF1FunctionKey; + break; + + case 123: + charcode = NSLeftArrowFunctionKey; + break; + + case 124: + charcode = NSRightArrowFunctionKey; + break; + + case 125: + charcode = NSDownArrowFunctionKey; + break; + + case 126: + charcode = NSUpArrowFunctionKey; + break; + } + + if (charcode == 'a') { + unsigned long state; + long keyTrans; + char charCode; + Ptr kchr; + state = 0; + kchr = (Ptr) GetScriptVariable(smCurrentScript, smKCHRCache); + keyTrans = KeyTranslate(kchr, code, &state); + charCode = keyTrans; + [item setKeyEquivalent:[NSString stringWithCString:&charCode length:1]]; + } else if (charcode != 'b') { + [item setKeyEquivalent:[NSString stringWithCharacters:&charcode length:1]]; + } +} + @end