{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
currentRemote = [self loadRemote];
- [currentRemote begin];
//Setup for notification of the remote player launching or quitting
[[[NSWorkspace sharedWorkspace] notificationCenter]
- (void)applicationLaunched:(NSNotification *)note
{
if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[currentRemote playerFullName]]) {
- unichar fullstar = 0x2605;
- unichar emptystar = 0x2606;
- NSString *fullStarChar = [NSString stringWithCharacters:&fullstar length:1];
- NSString *emptyStarChar = [NSString stringWithCharacters:&emptystar length:1];
- //Build the song rating menu
- ratingMenu = [[NSMenu alloc] initWithTitle:@""];
- [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:0];
- [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:20];
- [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:40];
- [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:60];
- [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, fullStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:80];
- [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, fullStarChar, fullStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:100];
+ [currentRemote begin];
+ [self timerUpdate];
[NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil];
[self setupHotKeys];
- [self rebuildMenu];
isAppRunning = ITMTRemotePlayerRunning;
}
}
NSMenu *notRunningMenu = [[NSMenu alloc] initWithTitle:@""];
[notRunningMenu addItemWithTitle:[NSString stringWithFormat:@"Open %@", [currentRemote playerSimpleName]] action:@selector(showPlayer:) keyEquivalent:@""];
[notRunningMenu addItem:[NSMenuItem separatorItem]];
- [notRunningMenu addItemWithTitle:@"Preferences" action:@selector(showPreferences:) keyEquivalent:@""];
- [notRunningMenu addItemWithTitle:@"Quit" action:@selector(quitMenuTunes:) keyEquivalent:@""];
+ [notRunningMenu addItemWithTitle:@"Preferences..." action:@selector(showPreferences:) keyEquivalent:@""];
+ [[notRunningMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@""] setTarget:NSApp];
+ [statusItem setMenu:[notRunningMenu autorelease]];
+ [currentRemote halt];
[refreshTimer invalidate];
[refreshTimer release];
refreshTimer = nil;
[self clearHotKeys];
isAppRunning = ITMTRemotePlayerNotRunning;
-
- [ratingMenu release];
-
- [statusItem setMenu:[notRunningMenu autorelease]];
}
}
//Recreate the status item menu
- (void)rebuildMenu
{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- NSArray *myMenu = [defaults arrayForKey:@"menu"];
- int playlist = [currentRemote currentPlaylistIndex];
+ NSUserDefaults *defaults;
+ NSArray *myMenu;
+ int playlist;
int i;
+ unichar fullstar = 0x2605;
+ unichar emptystar = 0x2606;
+ NSString *fullStarChar;
+ NSString *emptyStarChar;
if ([currentRemote playerRunningState] == ITMTRemotePlayerNotRunning) {
return;
}
+ defaults = [NSUserDefaults standardUserDefaults];
+ myMenu = [defaults arrayForKey:@"menu"];
+ playlist = [currentRemote currentPlaylistIndex];
+ fullStarChar = [NSString stringWithCharacters:&fullstar length:1];
+ emptyStarChar = [NSString stringWithCharacters:&emptystar length:1];
+
trackInfoIndex = -1;
lastPlaylistIndex = -1;
[menu release];
menu = [[NSMenu alloc] initWithTitle:@""];
+ //Release the old submenus
playPauseItem = nil;
-
upcomingSongsItem = nil;
[upcomingSongsMenu release];
upcomingSongsMenu = nil;
-
- if (ratingItem) {
- [ratingItem setSubmenu:nil];
- }
-
playlistItem = nil;
[playlistMenu release];
playlistMenu = nil;
-
eqItem = nil;
[eqMenu release];
eqMenu = nil;
+ if (ratingItem) {
+ [ratingItem setSubmenu:nil];
+ [ratingItem release];
+ ratingItem = nil;
+ }
+
+ //Build the rating menu
+ [ratingMenu release];
+ ratingMenu = [[NSMenu alloc] initWithTitle:@""];
+ [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:0];
+ [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, emptyStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:20];
+ [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, emptyStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:40];
+ [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, emptyStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:60];
+ [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, fullStarChar, emptyStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:80];
+ [[ratingMenu addItemWithTitle:[NSString stringWithFormat:@"%@%@%@%@%@", fullStarChar, fullStarChar, fullStarChar, fullStarChar, fullStarChar] action:@selector(selectSongRating:) keyEquivalent:@""] setTag:100];
//Build the custom menu
for (i = 0; i < [myMenu count]; i++) {
NSString *item = [myMenu objectAtIndex:i];
if ([item isEqualToString:@"Play/Pause"]) {
- KeyCombo *tempCombo = [[NSUserDefaults standardUserDefaults] keyComboForKey:@"PlayPause"];
+ ITKeyCombo *tempCombo = [[NSUserDefaults standardUserDefaults] keyComboForKey:@"PlayPause"];
playPauseItem = [menu addItemWithTitle:@"Play"
action:@selector(playPause:)
keyEquivalent:@""];
[tempCombo release];
}
} else if ([item isEqualToString:@"Next Track"]) {
- KeyCombo *tempCombo = [[NSUserDefaults standardUserDefaults] keyComboForKey:@"NextTrack"];
+ ITKeyCombo *tempCombo = [[NSUserDefaults standardUserDefaults] keyComboForKey:@"NextTrack"];
NSMenuItem *nextTrack = [menu addItemWithTitle:@"Next Track"
action:@selector(nextSong:)
keyEquivalent:@""];
[tempCombo release];
}
} else if ([item isEqualToString:@"Previous Track"]) {
- KeyCombo *tempCombo = [[NSUserDefaults standardUserDefaults] keyComboForKey:@"PrevTrack"];
+ ITKeyCombo *tempCombo = [[NSUserDefaults standardUserDefaults] keyComboForKey:@"PrevTrack"];
NSMenuItem *prevTrack = [menu addItemWithTitle:@"Previous Track"
action:@selector(prevSong:)
keyEquivalent:@""];
eqItem = [menu addItemWithTitle:@"EQ Presets"
action:nil
keyEquivalent:@""];
- } else if ([item isEqualToString:@"PreferencesÉ"]) {
- [menu addItemWithTitle:@"PreferencesÉ"
+ } else if ([item isEqualToString:@"Preferences…"]) {
+ [menu addItemWithTitle:@"Preferences…"
action:@selector(showPreferences:)
keyEquivalent:@""];
} else if ([item isEqualToString:@"Quit"]) {
- [menu addItemWithTitle:@"Quit"
- action:@selector(quitMenuTunes:)
- keyEquivalent:@""];
+ [[menu addItemWithTitle:@"Quit"
+ action:@selector(terminate:)
+ keyEquivalent:@""] setTarget:NSApp];
} else if ([item isEqualToString:@"Current Track Info"]) {
trackInfoIndex = [menu numberOfItems];
[menu addItemWithTitle:@"No Song"
action:nil
keyEquivalent:@""];
} else if ([item isEqualToString:@"Song Rating"]) {
- ratingItem = [menu addItemWithTitle:@"Song Rating"
+ ratingItem = [[menu addItemWithTitle:@"Song Rating"
action:nil
- keyEquivalent:@""];
+ keyEquivalent:@""] retain];
[ratingItem setSubmenu:ratingMenu];
} else if ([item isEqualToString:@"<separator>"]) {
[menu addItem:[NSMenuItem separatorItem]];
[self rebuildEQPresetsMenu];
}
- isPlayingRadio = ([currentRemote classOfPlaylistAtIndex:playlist] == ITMTRemotePlayerRadioPlaylist);
+ isPlayingRadio = ([currentRemote currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist);
if (upcomingSongsItem) {
[self rebuildUpcomingSongsMenu];
[ratingItem setEnabled:NO];
} else {
int currentSongRating = ([currentRemote currentSongRating] * 5);
- [[ratingMenu itemAtIndex:lastSongRating] setState:NSOffState];
lastSongRating = currentSongRating;
[[ratingMenu itemAtIndex:lastSongRating] setState:NSOnState];
[ratingItem setEnabled:YES];
}
//Set the new unique song identifier
- lastSongIdentifier = [[currentRemote currentSongUniqueIdentifier] retain];
+ lastSongIdentifier = [[currentRemote playerStateUniqueIdentifier] retain];
//If we're in a playlist or radio mode
if ( ![lastSongIdentifier isEqualToString:@"0-0"] && (trackInfoIndex > -1) ) {
if ([defaults boolForKey:@"showAlbum"]) {
NSString *album = [currentRemote currentSongAlbum];
- if ([album length] > 0) {
+ if ( album ) {
[menu insertItemWithTitle:[NSString stringWithFormat:@" %@", album] action:nil keyEquivalent:@"" atIndex:trackInfoIndex + 1];
}
}
}
if ([title length] > 0) {
- [menu insertItemWithTitle:[NSString stringWithFormat:@" %@", title] action:nil keyEquivalent:@"" atIndex:trackInfoIndex + 1];
+ [menu insertItemWithTitle:[NSString stringWithFormat:@" %@", title] action:nil keyEquivalent:@"" atIndex:trackInfoIndex + 1];
}
}
{
int currentSongRating = ([currentRemote currentSongRating] * 5);
if ([currentRemote currentPlaylistIndex] && (currentSongRating != lastSongRating)) {
- if ([currentRemote classOfPlaylistAtIndex:[currentRemote currentPlaylistIndex]] == ITMTRemotePlayerRadioPlaylist) {
+ if ([currentRemote currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist) {
return;
}
[[ratingMenu itemAtIndex:lastSongRating] setState:NSOffState];
- (void)timerUpdate
{
- NSString *currentIdentifier = [currentRemote currentSongUniqueIdentifier];
+ NSString *currentIdentifier = [currentRemote playerStateUniqueIdentifier];
if (![lastSongIdentifier isEqualToString:currentIdentifier] ||
- (!isPlayingRadio && ([currentRemote classOfPlaylistAtIndex:[currentRemote currentPlaylistIndex]] == ITMTRemotePlayerRadioPlaylist))) {
+ (!isPlayingRadio && ([currentRemote currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist))) {
+ //
+ //
+ // If we want to show the new track floater, do it here!
+ //[self showCurrentTrackInfoStatusWindow];
+ //
+ //
[self rebuildMenu];
}
//Update Play/Pause menu item
if (playPauseItem){
+ //
+ //
+ // If we want to show the song played/paused, show it here!
+ //
+ //
if ([currentRemote playerPlayingState] == ITMTRemotePlayerPlaying) {
[playPauseItem setTitle:@"Pause"];
} else {
//
//
-- (void)quitMenuTunes:(id)sender
-{
- [NSApp terminate:self];
-}
- (void)showPlayer:(id)sender
{
- (void)clearHotKeys
{
- [[HotKeyCenter sharedCenter] removeHotKey:@"PlayPause"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"NextTrack"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"PrevTrack"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"TrackInfo"];
- [[HotKeyCenter sharedCenter] removeHotKey:@"UpcomingSongs"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"PlayPause"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"NextTrack"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"PrevTrack"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"ToggleVisualizer"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"TrackInfo"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"UpcomingSongs"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"ToggleLoop"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"ToggleShuffle"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"IncrementVolume"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"DecrementVolume"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"IncrementRating"];
+ [[ITHotKeyCenter sharedCenter] removeHotKey:@"DecrementRating"];
}
- (void)setupHotKeys
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"PlayPause"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"PlayPause"
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"PlayPause"
combo:[defaults keyComboForKey:@"PlayPause"]
target:self action:@selector(playPause:)];
}
if ([defaults objectForKey:@"NextTrack"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"NextTrack"
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"NextTrack"
combo:[defaults keyComboForKey:@"NextTrack"]
target:self action:@selector(nextSong:)];
}
if ([defaults objectForKey:@"PrevTrack"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"PrevTrack"
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"PrevTrack"
combo:[defaults keyComboForKey:@"PrevTrack"]
target:self action:@selector(prevSong:)];
}
+ if ([defaults objectForKey:@"ToggleVisualizer"] != nil) {
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"ToggleVisualizer"
+ combo:[defaults keyComboForKey:@"ToggleVisualizer"]
+ target:self action:@selector(toggleVisualizer)];
+ }
+
if ([defaults objectForKey:@"TrackInfo"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"TrackInfo"
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"TrackInfo"
combo:[defaults keyComboForKey:@"TrackInfo"]
- target:self action:@selector(showCurrentTrackInfo)];
+ target:self action:@selector(showCurrentTrackInfoStatusWindow)];
}
if ([defaults objectForKey:@"UpcomingSongs"] != nil) {
- [[HotKeyCenter sharedCenter] addHotKey:@"UpcomingSongs"
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"UpcomingSongs"
combo:[defaults keyComboForKey:@"UpcomingSongs"]
- target:self action:@selector(showUpcomingSongs)];
+ target:self action:@selector(showUpcomingSongsStatusWindow)];
+ }
+
+ if ([defaults objectForKey:@"ToggleLoop"] != nil) {
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"ToggleLoop"
+ combo:[defaults keyComboForKey:@"ToggleLoop"]
+ target:self action:@selector(showToggleLoopStatusWindow)];
+ }
+
+ if ([defaults objectForKey:@"ToggleShuffle"] != nil) {
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"ToggleShuffle"
+ combo:[defaults keyComboForKey:@"ToggleShuffle"]
+ target:self action:@selector(showToggleShuffleStatusWindow)];
+ }
+
+ if ([defaults objectForKey:@"IncrementVolume"] != nil) {
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"IncrementVolume"
+ combo:[defaults keyComboForKey:@"IncrementVolume"]
+ target:self action:@selector(showVolumeIncrementStatusWindow)];
+ }
+
+ if ([defaults objectForKey:@"DecrementVolume"] != nil) {
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"DecrementVolume"
+ combo:[defaults keyComboForKey:@"DecrementVolume"]
+ target:self action:@selector(showVolumeDecrementStatusWindow)];
+ }
+
+ if ([defaults objectForKey:@"IncrementRating"] != nil) {
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"IncrementRating"
+ combo:[defaults keyComboForKey:@"IncrementRating"]
+ target:self action:@selector(showRatingIncrementStatusWindow)];
+ }
+
+ if ([defaults objectForKey:@"DecrementRating"] != nil) {
+ [[ITHotKeyCenter sharedCenter] addHotKey:@"DecrementRating"
+ combo:[defaults keyComboForKey:@"DecrementRating"]
+ target:self action:@selector(showRatingDecrementStatusWindow)];
}
}
//
//
-// Show Current Track Info And Show Upcoming Songs Floaters
+// Status Window Methods
//
//
-- (void)showCurrentTrackInfo
+- (void)showCurrentTrackInfoStatusWindow
{
NSString *trackName = [currentRemote currentSongTitle];
if (!statusWindow && [trackName length]) {
if ([defaults boolForKey:@"showAlbum"]) {
NSString *trackAlbum = [currentRemote currentSongAlbum];
- if ([trackAlbum length]) {
+ if ( trackAlbum ) {
stringToShow = [stringToShow stringByAppendingString:trackAlbum];
stringToShow = [stringToShow stringByAppendingString:@"\n"];
}
}
}
-- (void)showUpcomingSongs
+- (void)showUpcomingSongsStatusWindow
{
int curPlaylist = [currentRemote currentPlaylistIndex];
if (!statusWindow) {
}
}
+- (void)showVolumeIncrementStatusWindow
+{
+}
+
+- (void)showVolumeDecrementStatusWindow
+{
+}
+
+- (void)showRatingIncrementStatusWindow
+{
+}
+
+- (void)showRatingDecrementStatusWindow
+{
+}
+
+- (void)showToggleLoopStatusWindow
+{
+}
+
+- (void)showToggleShuffleStatusWindow
+{
+}
+
+- (void)toggleVisualizer
+{
+ NSLog(@"Visualizer On/Off");
+}
+
- (void)fadeAndCloseStatusWindow
{
[statusWindow orderOut:self];
//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';*/
+ SetMenuItemCommandKey(menuRef, 1, NO, 49);
+ SetMenuItemModifiers(menuRef, 1, kMenuNoCommandModifier);
+ SetMenuItemKeyGlyph(menuRef, 1, kMenuBlankGlyph);*/
+ charcode = 'b';
}
break;