<integer>6</integer>
</array>
<key>IBSystem Version</key>
- <string>6L29</string>
+ <string>6L60</string>
</dict>
</plist>
statusWindowController = [[StatusWindowController alloc] init];
menuController = [[MenuController alloc] init];
df = [[NSUserDefaults standardUserDefaults] retain];
- [self setLatestSongIdentifier:@"0-0"];
}
return self;
}
target:self action:@selector(showUpcomingSongs)];
}
-/* if ([df objectForKey:@"ToggleLoop"] != nil) {
+ if ([df objectForKey:@"ToggleLoop"] != nil) {
[[HotKeyCenter sharedCenter] addHotKey:@"ToggleLoop"
combo:[df keyComboForKey:@"ToggleLoop"]
- target:self action:NULL];
+ target:self action:@selector(toggleLoop)];
}
if ([df objectForKey:@"ToggleShuffle"] != nil) {
[[HotKeyCenter sharedCenter] addHotKey:@"ToggleShuffle"
combo:[df keyComboForKey:@"ToggleShuffle"]
- target:self action:NULL];
+ target:self action:@selector(toggleShuffle)];
}
if ([df objectForKey:@"IncrementVolume"] != nil) {
[[HotKeyCenter sharedCenter] addHotKey:@"IncrementVolume"
combo:[df keyComboForKey:@"IncrementVolume"]
- target:self action:NULL];
+ target:self action:@selector(incrementVolume)];
}
if ([df objectForKey:@"DecrementVolume"] != nil) {
[[HotKeyCenter sharedCenter] addHotKey:@"DecrementVolume"
combo:[df keyComboForKey:@"DecrementVolume"]
- target:self action:NULL];
+ target:self action:@selector(decrementVolume)];
}
if ([df objectForKey:@"IncrementRating"] != nil) {
[[HotKeyCenter sharedCenter] addHotKey:@"IncrementRating"
combo:[df keyComboForKey:@"IncrementRating"]
- target:self action:NULL];
+ target:self action:@selector(incrementRating)];
}
if ([df objectForKey:@"DecrementRating"] != nil) {
[[HotKeyCenter sharedCenter] addHotKey:@"DecrementRating"
combo:[df keyComboForKey:@"DecrementRating"]
- target:self action:NULL];
- }*/
+ target:self action:@selector(decrementRating)];
+ }
}
- (void)showCurrentTrackInfo
}
}
+- (void)incrementVolume
+{
+ float volume = [currentRemote volume];
+ volume += 0.2;
+ if (volume > 1.0) {
+ volume = 1.0;
+ }
+ [currentRemote setVolume:volume];
+
+ //Show volume status window
+}
+
+- (void)decrementVolume
+{
+ float volume = [currentRemote volume];
+ volume -= 0.2;
+ if (volume < 0.0) {
+ volume = 0.0;
+ }
+ [currentRemote setVolume:volume];
+
+ //Show volume status window
+}
+
+- (void)incrementRating
+{
+ float rating = [currentRemote currentSongRating];
+ rating += 0.2;
+ if (rating > 1.0) {
+ rating = 1.0;
+ }
+ [currentRemote setCurrentSongRating:rating];
+
+ //Show rating status window
+}
+
+- (void)decrementRating
+{
+ float rating = [currentRemote currentSongRating];
+ rating -= 0.2;
+ if (rating < 0.0) {
+ rating = 0.0;
+ }
+ [currentRemote setCurrentSongRating:rating];
+
+ //Show rating status window
+}
+
+- (void)toggleLoop
+{
+ ITMTRemotePlayerRepeatMode repeatMode = [currentRemote repeatMode];
+
+ switch (repeatMode) {
+ case ITMTRemotePlayerRepeatOff:
+ repeatMode = ITMTRemotePlayerRepeatAll;
+ break;
+ case ITMTRemotePlayerRepeatAll:
+ repeatMode = ITMTRemotePlayerRepeatOne;
+ break;
+ case ITMTRemotePlayerRepeatOne:
+ repeatMode = ITMTRemotePlayerRepeatOff;
+ break;
+ }
+ [currentRemote setRepeatMode:repeatMode];
+
+ //Show loop status window
+}
+
+- (void)toggleShuffle
+{
+ [currentRemote setShuffleEnabled:![currentRemote shuffleEnabled]];
+ //Show shuffle status window
+}
+
/*************************************************************************/
#pragma mark -
#pragma mark WORKSPACE NOTIFICATION HANDLERS
- (void)applicationLaunched:(NSNotification *)note
{
if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[currentRemote playerFullName]]) {
+ [self setLatestSongIdentifier:@""];
[self timerUpdate];
[NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil];
[self setupHotKeys];
#import "MenuController.h"
#import "NewMainController.h"
+#import "HotKeyCenter.h"
+#import "KeyCombo.h"
@interface MenuController (SubmenuMethods)
- (NSMenu *)ratingMenu;
- (NSMenu *)upcomingSongsMenu;
- (NSMenu *)playlistsMenu;
- (NSMenu *)eqMenu;
+- (void)setKeyEquivalentForCode:(short)code andModifiers:(long)modifiers
+ onItem:(NSMenuItem *)item;
@end
@implementation MenuController
NSEnumerator *enumerator = [menuArray objectEnumerator];
NSString *nextObject;
NSMenuItem *tempItem;
+ NSEnumerator *itemEnum;
+ KeyCombo *keyCombo;
//Get the information
_currentPlaylist = [currentRemote currentPlaylistIndex];
[tempItem setTag:MTMenuPlayPauseItem];
[tempItem setTarget:self];
+ if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"PlayPause"]) ) {
+ [self setKeyEquivalentForCode:[keyCombo keyCode]
+ andModifiers:[keyCombo modifiers]
+ onItem:tempItem];
+ }
+
switch ([currentRemote playerPlayingState]) {
case ITMTRemotePlayerPlaying:
[tempItem setTitle:@"Pause"];
tempItem = [menu addItemWithTitle:@"Next Track"
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
+
+ if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"NextTrack"]) ) {
+ [self setKeyEquivalentForCode:[keyCombo keyCode]
+ andModifiers:[keyCombo modifiers]
+ onItem:tempItem];
+ }
+
if (_currentPlaylist) {
[tempItem setTag:MTMenuNextTrackItem];
[tempItem setTarget:self];
tempItem = [menu addItemWithTitle:@"Previous Track"
action:@selector(performMainMenuAction:)
keyEquivalent:@""];
+
+ if ( (keyCombo = [[HotKeyCenter sharedCenter] keyComboForName:@"PrevTrack"]) ) {
+ [self setKeyEquivalentForCode:[keyCombo keyCode]
+ andModifiers:[keyCombo modifiers]
+ onItem:tempItem];
+ }
+
if (_currentPlaylist) {
[tempItem setTag:MTMenuPreviousTrackItem];
[tempItem setTarget:self];
keyEquivalent:@""];
[tempItem setSubmenu:_ratingMenu];
[tempItem setTag:1];
+
+ itemEnum = [[_ratingMenu itemArray] objectEnumerator];
+ while ( (tempItem = [itemEnum nextObject]) ) {
+ [tempItem setState:NSOffState];
+ }
+
+ [[_ratingMenu itemAtIndex:([currentRemote currentSongRating] * 5)] setState:NSOnState];
if (_playingRadio || !_currentPlaylist) {
[tempItem setEnabled:NO];
}
keyEquivalent:@""];
[tempItem setSubmenu:_eqMenu];
[tempItem setTag:4];
+
+ itemEnum = [[_eqMenu itemArray] objectEnumerator];
+ while ( (tempItem = [itemEnum nextObject]) ) {
+ [tempItem setState:NSOffState];
+ }
+ [[_eqMenu itemAtIndex:([currentRemote currentEQPresetIndex] - 1)] setState:NSOnState];
}
}
[_currentMenu release];
[ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★★☆"] action:nil keyEquivalent:@""];
[ratingMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★★★"] action:nil keyEquivalent:@""];
- [[ratingMenu itemAtIndex:([currentRemote currentSongRating] * 5)] setState:NSOnState];
-
itemEnum = [[ratingMenu itemArray] objectEnumerator];
while ( (anItem = [itemEnum nextObject]) ) {
[anItem setAction:itemSelector];
[tempItem setTarget:self];
}
}
- [[eqMenu itemAtIndex:([currentRemote currentEQPresetIndex] - 1)] setState:NSOnState];
return eqMenu;
}
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");
#import "PreferencesController.h"
-#import "MainController.h"
+#import "NewMainController.h"
#import "HotKeyCenter.h"
#import <ITKit/ITWindowPositioning.h>
NSString *string = [combo userDisplayRep];
NSEnumerator *enumerator = [hotKeysDictionary keyEnumerator];
NSString *enumKey;
- BOOL duplicateCombo = NO;
if (string == nil) {
string = @"";
}
}
- if (!duplicateCombo) {
- [hotKeysDictionary setObject:combo forKey:currentHotKey];
- [df setKeyCombo:combo forKey:currentHotKey];
-
- if ([currentHotKey isEqualToString:@"PlayPause"]) {
- [playPauseButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"NextTrack"]) {
- [nextTrackButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"PrevTrack"]) {
- [previousTrackButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"ToggleVisualizer"]) {
- [visualizerButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"TrackInfo"]) {
- [trackInfoButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"UpcomingSongs"]) {
- [upcomingSongsButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"IncrementVolume"]) {
- [volumeIncrementButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"DecrementVolume"]) {
- [volumeDecrementButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"IncrementRating"]) {
- [ratingIncrementButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"DecrementRating"]) {
- [ratingDecrementButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"ToggleShuffle"]) {
- [toggleShuffleButton setTitle:string];
- } else if ([currentHotKey isEqualToString:@"ToggleLoop"]) {
- [toggleLoopButton setTitle:string];
- }
+ [hotKeysDictionary setObject:combo forKey:currentHotKey];
+ [df setKeyCombo:combo forKey:currentHotKey];
+
+ if ([currentHotKey isEqualToString:@"PlayPause"]) {
+ [playPauseButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"PlayPause" combo:combo target:[MainController sharedController] action:@selector(playPause)];
+ } else if ([currentHotKey isEqualToString:@"NextTrack"]) {
+ [nextTrackButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"NextTrack" combo:combo target:[MainController sharedController] action:@selector(nextSong)];
+ } else if ([currentHotKey isEqualToString:@"PrevTrack"]) {
+ [previousTrackButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"PrevTrack" combo:combo target:[MainController sharedController] action:@selector(prevSong)];
+ } else if ([currentHotKey isEqualToString:@"ToggleVisualizer"]) {
+ [visualizerButton setTitle:string];
+ //[[HotKeyCenter sharedCenter] addHotKey:@"ToggleVisualizer" combo:combo target:[MainController sharedController] selector:@selector(NULL)];
+ } else if ([currentHotKey isEqualToString:@"TrackInfo"]) {
+ [trackInfoButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"TrackInfo" combo:combo target:[MainController sharedController] action:@selector(showCurrentTrackInfo)];
+ } else if ([currentHotKey isEqualToString:@"UpcomingSongs"]) {
+ [upcomingSongsButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"UpcomingSongs" combo:combo target:[MainController sharedController] action:@selector(showUpcomingSongs)];
+ } else if ([currentHotKey isEqualToString:@"IncrementVolume"]) {
+ [volumeIncrementButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"IncrementVolume" combo:combo target:[MainController sharedController] action:@selector(incrementVolume)];
+ } else if ([currentHotKey isEqualToString:@"DecrementVolume"]) {
+ [volumeDecrementButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"DecrementVolume" combo:combo target:[MainController sharedController] action:@selector(decrementVolume)];
+ } else if ([currentHotKey isEqualToString:@"IncrementRating"]) {
+ [ratingIncrementButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"IncrementRating" combo:combo target:[MainController sharedController] action:@selector(incrementRating)];
+ } else if ([currentHotKey isEqualToString:@"DecrementRating"]) {
+ [ratingDecrementButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"DecrementRating" combo:combo target:[MainController sharedController] action:@selector(decrementRating)];
+ } else if ([currentHotKey isEqualToString:@"ToggleShuffle"]) {
+ [toggleShuffleButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"ToggleShuffle" combo:combo target:[MainController sharedController] action:@selector(toggleShuffle)];
+ } else if ([currentHotKey isEqualToString:@"ToggleLoop"]) {
+ [toggleLoopButton setTitle:string];
+ [[HotKeyCenter sharedCenter] addHotKey:@"ToggleLoop" combo:combo target:[MainController sharedController] action:@selector(toggleLoop)];
}
[self cancelHotKey:sender];
}
- (float)currentSongRating
{
- return [[ITAppleEventCenter sharedCenter]
+ return (float)[[ITAppleEventCenter sharedCenter]
sendTwoTierAEWithRequestedKeyForNumber:@"pRte" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:[self iTunesPSN]] / 100.0;
}
- (float)volume
{
- long vol = [[ITAppleEventCenter sharedCenter] sendAEWithRequestedKeyForNumber:@"pVol" eventClass:@"core" eventID:@"getd" appPSN:[self iTunesPSN]];
- return vol / 100;
+ return (float)[[ITAppleEventCenter sharedCenter] sendAEWithRequestedKeyForNumber:@"pVol" eventClass:@"core" eventID:@"getd" appPSN:[self iTunesPSN]] / 100;
}
- (BOOL)setVolume:(float)volume