/*
Things to do:
-¥ Radio mode makes things act oddly
¥ Make preferences window pretty
-¥ Hot Keys
- - hot keys can't be set when NSBGOnly is on. The window is not key,
- so the KeyBroadcaster does not pick up key combos
- - going to need a different way of defining key combos
¥ Optimize
¥ Apple Events! Apple Events! Apple Events!
-¥ Upcoming songs menu items are disabled after launching iTunes and playing
*/
#import "MenuTunes.h"
[[statusItem _button] setAlternateImage:[NSImage imageNamed:@"selected_image"]];
[statusItem setHighlightMode:YES];
[statusItem setMenu:menu];
+ // Below line of code is for creating builds for Beta Testers
+ // [statusItem setToolTip:@"This Nontransferable Beta (Built on __DATE__) of iThink Software's MenuTunes is Registered to: Beta Tester (betatester@somedomain.com)."];
[statusItem retain];
// view = [[MenuTunesView alloc] initWithFrame:[[statusItem view] frame]];
// [statusItem setView:view];
{
NSString *curAlbumName = [self runScriptAndReturnResult:@"return album of current track"];
NSMenuItem *menuItem;
-
if ((iTunesPSN.highLongOfPSN == kNoProcess) && (iTunesPSN.lowLongOfPSN == 0)) {
return;
}
if (index > -1) {
[menu removeItemAtIndex:index + 1];
-
if (didHaveAlbumName) {
[menu removeItemAtIndex:index + 1];
}
}
-
- if ([curAlbumName length] > 0) {
- menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@" %@", curAlbumName]
- action:nil
- keyEquivalent:@""];
- [menu insertItem:menuItem atIndex:trackInfoIndex + 1];
- [menuItem release];
+ if (!isPlayingRadio) {
+ if ([curAlbumName length] > 0) {
+ menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@" %@", curAlbumName]
+ action:nil
+ keyEquivalent:@""];
+ [menu insertItem:menuItem atIndex:trackInfoIndex + 1];
+ [menuItem release];
+ }
}
-
menuItem = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@" %@", curSongName]
action:nil
keyEquivalent:@""];
{
int numSongs = [[self runScriptAndReturnResult:@"return number of tracks in current playlist"] intValue];
int numSongsInAdvance = [[NSUserDefaults standardUserDefaults] integerForKey:@"SongsInAdvance"];
-
- if (numSongs > 0) {
- int curTrack = [[self runScriptAndReturnResult:@"return index of current track"] intValue];
- int i;
-
- [upcomingSongsMenu release];
- upcomingSongsMenu = [[NSMenu alloc] initWithTitle:@""];
-
- for (i = curTrack + 1; i <= curTrack + numSongsInAdvance; i++) {
- if (i <= numSongs) {
- NSString *curSong = [self runScriptAndReturnResult:[NSString stringWithFormat:@"return name of track %i of current playlist", i]];
- NSMenuItem *songItem;
- songItem = [[NSMenuItem alloc] initWithTitle:curSong action:@selector(playTrack:) keyEquivalent:@""];
- [songItem setTarget:self];
- [songItem setRepresentedObject:[NSNumber numberWithInt:i]];
- [upcomingSongsMenu addItem:songItem];
- [songItem release];
- } else {
- [upcomingSongsMenu addItemWithTitle:@"End of playlist." action:nil keyEquivalent:@""];
- break;
+ if (!isPlayingRadio) {
+ if (numSongs > 0) {
+ int curTrack = [[self runScriptAndReturnResult:@"return index of current track"] intValue];
+ int i;
+
+ [upcomingSongsMenu release];
+ upcomingSongsMenu = [[NSMenu alloc] initWithTitle:@""];
+ [upcomingSongsItem setSubmenu:upcomingSongsMenu];
+ [upcomingSongsItem setEnabled:YES];
+
+ for (i = curTrack + 1; i <= curTrack + numSongsInAdvance; i++) {
+ if (i <= numSongs) {
+ NSString *curSong = [self runScriptAndReturnResult:[NSString stringWithFormat:@"return name of track %i of current playlist", i]];
+ NSMenuItem *songItem;
+ songItem = [[NSMenuItem alloc] initWithTitle:curSong action:@selector(playTrack:) keyEquivalent:@""];
+ [songItem setTarget:self];
+ [songItem setRepresentedObject:[NSNumber numberWithInt:i]];
+ [upcomingSongsMenu addItem:songItem];
+ [songItem release];
+ } else {
+ break;
+ }
}
}
- [upcomingSongsItem setSubmenu:upcomingSongsMenu];
- [upcomingSongsItem setEnabled:YES];
+ } else {
+ [upcomingSongsItem setSubmenu:nil];
+ [upcomingSongsItem setEnabled:NO];
}
}
int numPlaylists = [[self runScriptAndReturnResult:@"return number of playlists"] intValue];
int i, curPlaylist = [[self runScriptAndReturnResult:@"return index of current playlist"] intValue];
+ if (isPlayingRadio)
+ {
+ curPlaylist = 0;
+ }
+
if (playlistMenu && (numPlaylists == [playlistMenu numberOfItems]))
return;
- (void)timerUpdate
{
int pid;
-
if (GetProcessPID(&iTunesPSN, &pid) == noErr) {
int trackPlayingIndex = [[self runScriptAndReturnResult:@"return index of current track"] intValue];
if (trackPlayingIndex != curTrackIndex) {
+ bool wasPlayingRadio = isPlayingRadio;
+ isPlayingRadio = [[self runScriptAndReturnResult:@"return class of current playlist"] isEqualToString:@"radio tuner playlist"];
+ if (isPlayingRadio && !wasPlayingRadio) {
+ int i;
+ for (i = 0; i < [playlistMenu numberOfItems]; i++)
+ {
+ [[playlistMenu itemAtIndex:i] setState:NSOffState];
+ }
+ }
+ if (wasPlayingRadio) {
+ NSMenuItem *temp = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""];
+ [menu insertItem:temp atIndex:trackInfoIndex + 1];
+ [temp release];
+ }
[self updateMenu];
curTrackIndex = trackPlayingIndex;
}
-
+ else
+ {
+ int playlist = [[self runScriptAndReturnResult:@"return index of current playlist"] intValue];
+ if (playlist != curPlaylistIndex) {
+ bool wasPlayingRadio = isPlayingRadio;
+ isPlayingRadio = [[self runScriptAndReturnResult:@"return class of current playlist"] isEqualToString:@"radio tuner playlist"];
+ if (isPlayingRadio && !wasPlayingRadio) {
+ int i;
+ for (i = 0; i < [playlistMenu numberOfItems]; i++)
+ {
+ [[playlistMenu itemAtIndex:i] setState:NSOffState];
+ }
+ }
+ if (wasPlayingRadio) {
+ NSMenuItem *temp = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""];
+ [menu insertItem:temp atIndex:trackInfoIndex + 1];
+ [temp release];
+ }
+ [self updateMenu];
+ curTrackIndex = trackPlayingIndex;
+ curPlaylistIndex = playlist;
+ }
+ }
//Update Play/Pause menu item
if (playPauseMenuItem){
if ([[self runScriptAndReturnResult:@"return player state"] isEqualToString:@"playing"]) {
- (void)selectPlaylist:(id)sender
{
int playlist = [[sender representedObject] intValue];
- int curPlaylist = [[self runScriptAndReturnResult:@"return index of current playlist"] intValue];
- [[playlistMenu itemAtIndex:curPlaylist - 1] setState:NSOffState];
+ if (!isPlayingRadio) {
+ int curPlaylist = [[self runScriptAndReturnResult:@"return index of current playlist"] intValue];
+ [[playlistMenu itemAtIndex:curPlaylist - 1] setState:NSOffState];
+ }
[self runScriptAndReturnResult:[NSString stringWithFormat:@"play playlist %i", playlist]];
[[playlistMenu itemAtIndex:playlist - 1] setState:NSOnState];
- [self updateMenu];
}
- (void)selectEQPreset:(id)sender