From f875a120d9bd1c8d288aba1fa02d525cd8c4d4c9 Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Tue, 13 May 2003 23:33:11 +0000 Subject: [PATCH] Should rebuild submenus on song change, and build the rest on click. Pretty speedy. It likes to crash for no reason at times though. --- MainController.m | 7 +++--- MenuController.h | 2 ++ MenuController.m | 63 ++++++++++++++++++++++++++++++++++++------------ 3 files changed, 54 insertions(+), 18 deletions(-) diff --git a/MainController.m b/MainController.m index 48ec66a..f501b69 100755 --- a/MainController.m +++ b/MainController.m @@ -162,17 +162,17 @@ static MainController *sharedController; - (void)timerUpdate { - //We're quite worthless now, aren't we? Just used to showing the status windows. - /*if ( ( [self songChanged] ) || + if ( ( [self songChanged] ) || ( ([self radioIsPlaying]) && (latestPlaylistClass != ITMTRemotePlayerRadioPlaylist) ) || ( (! [self radioIsPlaying]) && (latestPlaylistClass == ITMTRemotePlayerRadioPlaylist) ) ) { [self setLatestSongIdentifier:[currentRemote currentSongUniqueIdentifier]]; latestPlaylistClass = [currentRemote currentPlaylistClass]; + [menuController rebuildSubmenus]; if ( [df boolForKey:@"showSongInfoOnChange"] ) { [self showCurrentTrackInfo]; } - }*/ + } } - (void)menuClicked @@ -455,6 +455,7 @@ static MainController *sharedController; - (void)applicationLaunched:(NSNotification *)note { if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[currentRemote playerFullName]]) { + [self timerUpdate]; [NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil]; [self setupHotKeys]; playerRunningState = ITMTRemotePlayerRunning; diff --git a/MenuController.h b/MenuController.h index 83d55bc..a3da9e5 100755 --- a/MenuController.h +++ b/MenuController.h @@ -42,6 +42,7 @@ typedef enum { { NSMutableArray *_menuLayout; NSMenu *_currentMenu; + NSMenu *_ratingMenu, *_upcomingSongsMenu, *_eqMenu, *_playlistsMenu; //Submenus ITMTRemote *currentRemote; int _currentPlaylist, _currentTrack; @@ -50,6 +51,7 @@ typedef enum { - (NSMenu *)menu; - (NSMenu *)menuForNoPlayer; +- (void)rebuildSubmenus; // - (NSArray *)menuLayout; // - (void)setMenuLayout:(NSArray *)newLayoutArray; diff --git a/MenuController.m b/MenuController.m index c86e10e..b1ed0db 100755 --- a/MenuController.m +++ b/MenuController.m @@ -34,12 +34,27 @@ NSString *nextObject; NSMenuItem *tempItem; - //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 @@ -126,7 +141,8 @@ tempItem = [menu addItemWithTitle:@"Song Rating" action:nil keyEquivalent:@""]; - [tempItem setSubmenu:[self ratingMenu]]; + [tempItem setSubmenu:_ratingMenu]; + [tempItem setTag:1]; if (_playingRadio || !_currentPlaylist) { [tempItem setEnabled:NO]; } @@ -134,7 +150,8 @@ tempItem = [menu addItemWithTitle:@"Upcoming Songs" action:nil keyEquivalent:@""]; - [tempItem setSubmenu:[self upcomingSongsMenu]]; + [tempItem setSubmenu:_upcomingSongsMenu]; + [tempItem setTag:2]; if (_playingRadio || !_currentPlaylist) { [tempItem setEnabled:NO]; } @@ -142,15 +159,16 @@ tempItem = [menu addItemWithTitle:@"Playlists" action:nil keyEquivalent:@""]; - [tempItem setSubmenu:[self playlistsMenu]]; + [tempItem setSubmenu:_playlistsMenu]; + [tempItem setTag:3]; } else if ([nextObject isEqualToString:@"EQ Presets"]) { tempItem = [menu addItemWithTitle:@"EQ Presets" action:nil keyEquivalent:@""]; - [tempItem setSubmenu:[self eqMenu]]; + [tempItem setSubmenu:_eqMenu]; + [tempItem setTag:4]; } } - [_currentMenu release]; _currentMenu = menu; return _currentMenu; @@ -173,10 +191,26 @@ 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:@""]; - if (_currentPlaylist && !_playingRadio) { NSEnumerator *itemEnum; id anItem; @@ -200,8 +234,7 @@ itemTag += 20; } } - - return [ratingMenu autorelease]; + return ratingMenu; } - (NSMenu *)upcomingSongsMenu @@ -227,7 +260,7 @@ } } } - return [upcomingSongsMenu autorelease]; + return upcomingSongsMenu; } - (NSMenu *)playlistsMenu @@ -246,7 +279,7 @@ if (!_playingRadio && _currentPlaylist) { [[playlistsMenu itemAtIndex:_currentPlaylist - 1] setState:NSOnState]; } - return [playlistsMenu autorelease]; + return playlistsMenu; } - (NSMenu *)eqMenu @@ -265,7 +298,7 @@ } } [[eqMenu itemAtIndex:([currentRemote currentEQPresetIndex] - 1)] setState:NSOnState]; - return [eqMenu autorelease]; + return eqMenu; } - (void)performMainMenuAction:(id)sender @@ -545,4 +578,4 @@ } } -@end +@end \ No newline at end of file -- 2.20.1