X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/0f0fcccca7516fef317716f61356ebb6bb07c084..166324bee63502af1f85f9eb1126fbb5db19e0c0:/OldMainController.m diff --git a/OldMainController.m b/OldMainController.m index 23a4be4..0d22d9a 100755 --- a/OldMainController.m +++ b/OldMainController.m @@ -37,17 +37,18 @@ currentRemote = [self loadRemote]; [currentRemote begin]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remotePlayerTerminated:) name:@"ITMTRemoteAppDidTerminateNotification" object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remotePlayerLaunched:) name:@"ITMTRemoteAppDidLaunchNotification" object:nil]; + //Setup for notification of the remote player launching or quitting + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(applicationTerminated:) name:NSWorkspaceDidTerminateApplicationNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationLaunched:) name:NSWorkspaceDidLaunchApplicationNotification object:nil]; - [self registerDefaultsIfNeeded]; + [self registerDefaults]; menu = [[NSMenu alloc] initWithTitle:@""]; if ( ( [currentRemote playerRunningState] == ITMTRemotePlayerRunning ) ) { - [self remotePlayerLaunched:nil]; + [self applicationLaunched:nil]; } else { - [self remotePlayerTerminated:nil]; + [self applicationTerminated:nil]; } statusItem = [[ITStatusItem alloc] initWithStatusBar:[NSStatusBar systemStatusBar] withLength:NSSquareStatusItemLength]; @@ -94,13 +95,58 @@ return [remoteArray objectAtIndex:0]; } +// +// + +- (void)applicationLaunched:(NSNotification *)note +{ + if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[currentRemote playerFullName]]) { + [NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil]; + + [self rebuildMenu]; + [statusItem setMenu:menu]; + [self setupHotKeys]; + isAppRunning = ITMTRemotePlayerRunning; + return; + } + + isAppRunning = ITMTRemotePlayerRunning; +} + +- (void)applicationTerminated:(NSNotification *)note +{ + if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[currentRemote playerFullName]]) { + NSMenu *notRunningMenu = [[NSMenu alloc] initWithTitle:@""]; + [[notRunningMenu addItemWithTitle:[NSString stringWithFormat:@"Open %@", [currentRemote playerSimpleName]] action:@selector(showPlayer:) keyEquivalent:@""] setTarget:self]; + [notRunningMenu addItem:[NSMenuItem separatorItem]]; + [[notRunningMenu addItemWithTitle:@"Preferences" action:@selector(showPreferences:) keyEquivalent:@""] setTarget:self]; + [[notRunningMenu addItemWithTitle:@"Quit" action:@selector(quitMenuTunes:) keyEquivalent:@""] setTarget:self]; + [statusItem setMenu:[menu autorelease]]; + + [refreshTimer invalidate]; + [refreshTimer release]; + refreshTimer = nil; + [self clearHotKeys]; + isAppRunning = NO; + return; + } +} + +- (void)startTimerInNewThread +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES] retain]; + [runLoop run]; + [pool release]; +} /*************************************************************************/ #pragma mark - #pragma mark INSTANCE METHODS /*************************************************************************/ -- (void)registerDefaultsIfNeeded +- (void)registerDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if (![defaults objectForKey:@"menu"]) { @@ -285,8 +331,6 @@ NSString *fullStarChar = [NSString stringWithCharacters:&fullstar length:1]; NSString *emptyStarChar = [NSString stringWithCharacters:&emptystar length:1]; NSMenuItem *item; - int i; - NSString *curTitle = [NSString stringWithFormat:@"%@%@%@%@%@", emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar]; songRatingMenuItem = [menu addItemWithTitle:@"Song Rating" action:nil @@ -294,21 +338,29 @@ ratingMenu = [[NSMenu alloc] initWithTitle:@""]; - item = [ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar] - action:@selector(setSongRating:) - keyEquivalent:@""]; + item = [ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""]; [item setTarget:self]; [item setTag:0]; - for (i = 1; i < 6; i++) { - curTitle = [curTitle substringToIndex:4]; - curTitle = [fullStarChar stringByAppendingString:curTitle]; - item = [ratingMenu addItemWithTitle:curTitle - action:@selector(setSongRating:) - keyEquivalent:@""]; - [item setTarget:self]; - [item setTag:(i * 20)]; - } + item = [ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""]; + [item setTarget:self]; + [item setTag:20]; + + item = [ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""]; + [item setTarget:self]; + [item setTag:40]; + + item = [ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""]; + [item setTarget:self]; + [item setTag:60]; + + item = [ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, fullStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""]; + [item setTarget:self]; + [item setTag:80]; + + item = [ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, fullStarChar, fullStarChar] action:@selector(selectSongRating:) keyEquivalent:@""]; + [item setTarget:self]; + [item setTag:100]; } else if ([item isEqualToString:@""]) { [menu addItem:[NSMenuItem separatorItem]]; } @@ -721,50 +773,6 @@ } } -- (void)remotePlayerLaunched:(NSNotification *)note -{ - isAppRunning = ITMTRemotePlayerRunning; - - //Restart the timer - [NSThread detachNewThreadSelector:@selector(runTimerInNewThread) toTarget:self withObject:nil]; - - [self rebuildMenu]; //Rebuild the menu since no songs will be playing - if (playlistItem) { - [self rebuildPlaylistMenu]; - } - if (eqItem) { - [self rebuildEQPresetsMenu]; - } - [statusItem setMenu:menu]; //Set the menu back to the main one -} - -- (void)runTimerInNewThread -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES] retain]; - [runLoop run]; - [pool release]; -} - -- (void)remotePlayerTerminated:(NSNotification *)note -{ - isAppRunning = ITMTRemotePlayerNotRunning; - - [menu release]; - menu = [[NSMenu alloc] initWithTitle:@""]; - [[menu addItemWithTitle:[NSString stringWithFormat:@"Open %@", [currentRemote playerSimpleName]] action:@selector(showPlayer:) keyEquivalent:@""] setTarget:self]; - [menu addItem:[NSMenuItem separatorItem]]; - [[menu addItemWithTitle:@"Preferences" action:@selector(showPreferences:) keyEquivalent:@""] setTarget:self]; - [[menu addItemWithTitle:@"Quit" action:@selector(quitMenuTunes:) keyEquivalent:@""] setTarget:self]; - [statusItem setMenu:menu]; - - [refreshTimer invalidate]; - [refreshTimer release]; - refreshTimer = nil; - [self clearHotKeys]; -} - // // // Selectors - called from status item menu @@ -844,11 +852,11 @@ [currentRemote setEqualizerEnabled:![currentRemote equalizerEnabled]]; } -- (void)setSongRating:(id)sender +- (void)selectSongRating:(id)sender { - NSLog(@"%f", [currentRemote currentSongRating]); - NSLog(@"%f", (float)[sender tag] / 100.0); + [[ratingMenu itemAtIndex:([currentRemote currentSongRating] / 20)] setState:NSOffState]; [currentRemote setCurrentSongRating:(float)[sender tag] / 100.0]; + [sender setState:NSOnState]; } //