From 24a440dccb5f6edb1e324e1cba03f373f89d0c30 Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Fri, 11 Apr 2003 02:02:41 +0000 Subject: [PATCH] Added the new keycombos in the prefs. Will go into MainController next. --- English.lproj/Preferences.nib/classes.nib | 12 +- English.lproj/Preferences.nib/info.nib | 7 +- .../Preferences.nib/keyedobjects.nib | Bin 34196 -> 34570 bytes OldMainController.m | 22 +- PreferencesController.h | 42 +-- PreferencesController.m | 251 +++++++++++++++--- 6 files changed, 267 insertions(+), 67 deletions(-) diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib index 10e4f8f..0110c5a 100755 --- a/English.lproj/Preferences.nib/classes.nib +++ b/English.lproj/Preferences.nib/classes.nib @@ -10,11 +10,7 @@ clearHotKey = id; okHotKey = id; save = id; - setCurrentTrackInfo = id; - setNextTrack = id; - setPlayPause = id; - setPreviousTrack = id; - setUpcomingSongs = id; + setNewHotKey = id; }; CLASS = PreferencesController; LANGUAGE = ObjC; @@ -30,10 +26,16 @@ nextTrackButton = NSButton; playPauseButton = NSButton; previousTrackButton = NSButton; + ratingDecrementButton = NSButton; + ratingIncrementButton = NSButton; songsInAdvance = NSTextField; + toggleLoopButton = NSButton; + toggleShuffleButton = NSButton; trackInfoButton = NSButton; trackTimeCheckbox = NSButton; upcomingSongsButton = NSButton; + volumeDecrementButton = NSButton; + volumeIncrementButton = NSButton; window = NSWindow; }; SUPERCLASS = NSObject; diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib index e9597db..37f99bc 100755 --- a/English.lproj/Preferences.nib/info.nib +++ b/English.lproj/Preferences.nib/info.nib @@ -3,9 +3,9 @@ IBDocumentLocation - 380 -54 356 240 0 0 1056 770 + 45 2 356 240 0 0 1152 746 IBFramework Version - 286.0 + 291.0 IBGroupedObjects 0 @@ -22,9 +22,10 @@ IBOpenObjects + 115 6 IBSystem Version - 6L28 + 6L29 diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib index cf067d6b12bcfd80a68d1aacabead4b12acad69a..5799d5fcb7b03cc71566746f73388989d8d200cd 100755 GIT binary patch literal 34570 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 VbK~?#qXGi{%~sOC`F~I8@()owemDRC literal 34196 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 TPEcQ_S+jo_miiC>-|YI|2(;P_ diff --git a/OldMainController.m b/OldMainController.m index eef9aaa..27ca9d1 100755 --- a/OldMainController.m +++ b/OldMainController.m @@ -257,6 +257,10 @@ [menu addItemWithTitle:@"Rewind" action:@selector(rewind:) keyEquivalent:@""]; + } else if ([item isEqualToString:@"Show Player"]) { + [menu addItemWithTitle:[NSString stringWithFormat:@"Show %@", [currentRemote playerSimpleName]] + action:@selector(showPlayer:) + keyEquivalent:@""]; } else if ([item isEqualToString:@"Upcoming Songs"]) { upcomingSongsItem = [menu addItemWithTitle:@"Upcoming Songs" action:nil @@ -740,12 +744,16 @@ } } - [statusWindow setText:stringToShow]; + // + //SHOW THE STATUS WINDOW HERE WITH STRING stringToShow + // + + /*[statusWindow setText:stringToShow]; [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(fadeAndCloseStatusWindow) userInfo:nil - repeats:NO]; + repeats:NO];*/ } } @@ -761,7 +769,6 @@ int i; NSString *songs = @""; - statusWindow = [ITTransientStatusWindow sharedWindow]; for (i = curTrack + 1; i <= curTrack + numSongsInAdvance; i++) { if (i <= numSongs) { NSString *curSong = [currentRemote songTitleAtIndex:i]; @@ -769,12 +776,17 @@ songs = [songs stringByAppendingString:@"\n"]; } } - [statusWindow setText:songs]; + + // + //SHOW STATUS WINDOW HERE WITH STRING songs + // + + /*[statusWindow setText:songs]; [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(fadeAndCloseStatusWindow) userInfo:nil - repeats:NO]; + repeats:NO];*/ } } } diff --git a/PreferencesController.h b/PreferencesController.h index 60fc875..35252ae 100755 --- a/PreferencesController.h +++ b/PreferencesController.h @@ -18,22 +18,28 @@ @interface PreferencesController : NSObject { - IBOutlet NSButton *albumCheckbox; + IBOutlet NSButton *albumCheckbox; IBOutlet NSTableView *allTableView; - IBOutlet NSButton *artistCheckbox; + IBOutlet NSButton *artistCheckbox; IBOutlet NSTextField *keyComboField; - IBOutlet NSPanel *keyComboPanel; - IBOutlet NSButton *launchAtLoginCheckbox; + IBOutlet NSPanel *keyComboPanel; + IBOutlet NSButton *launchAtLoginCheckbox; IBOutlet NSTableView *menuTableView; - IBOutlet NSButton *nameCheckbox; - IBOutlet NSButton *nextTrackButton; - IBOutlet NSButton *playPauseButton; - IBOutlet NSButton *previousTrackButton; + IBOutlet NSButton *nameCheckbox; + IBOutlet NSButton *nextTrackButton; + IBOutlet NSButton *playPauseButton; + IBOutlet NSButton *previousTrackButton; + IBOutlet NSButton *ratingDecrementButton; + IBOutlet NSButton *ratingIncrementButton; IBOutlet NSTextField *songsInAdvance; - IBOutlet NSButton *trackInfoButton; - IBOutlet NSButton *trackTimeCheckbox; - IBOutlet NSButton *upcomingSongsButton; - IBOutlet NSWindow *window; + IBOutlet NSButton *toggleLoopButton; + IBOutlet NSButton *toggleShuffleButton; + IBOutlet NSButton *trackInfoButton; + IBOutlet NSButton *trackTimeCheckbox; + IBOutlet NSButton *upcomingSongsButton; + IBOutlet NSButton *volumeDecrementButton; + IBOutlet NSButton *volumeIncrementButton; + IBOutlet NSWindow *window; MainController *controller; NSUserDefaults *df; @@ -47,6 +53,12 @@ KeyCombo *prevTrackCombo; KeyCombo *trackInfoCombo; KeyCombo *upcomingSongsCombo; + KeyCombo *volumeIncrementCombo; + KeyCombo *volumeDecrementCombo; + KeyCombo *ratingIncrementCombo; + KeyCombo *ratingDecrementCombo; + KeyCombo *toggleLoopCombo; + KeyCombo *toggleShuffleCombo; NSString *setHotKey; } @@ -62,11 +74,7 @@ - (IBAction)cancelHotKey:(id)sender; - (IBAction)clearHotKey:(id)sender; - (IBAction)okHotKey:(id)sender; -- (IBAction)setCurrentTrackInfo:(id)sender; -- (IBAction)setNextTrack:(id)sender; -- (IBAction)setPlayPause:(id)sender; -- (IBAction)setPreviousTrack:(id)sender; -- (IBAction)setUpcomingSongs:(id)sender; +- (IBAction)setNewHotKey:(id)sender; - (void)setHotKey:(NSString *)key; - (void)setKeyCombo:(KeyCombo *)newCombo; diff --git a/PreferencesController.m b/PreferencesController.m index 217afb4..3f3a8b3 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -97,6 +97,12 @@ static PreferencesController *prefs = nil; [df setKeyCombo:prevTrackCombo forKey:@"PrevTrack"]; [df setKeyCombo:trackInfoCombo forKey:@"TrackInfo"]; [df setKeyCombo:upcomingSongsCombo forKey:@"UpcomingSongs"]; + [df setKeyCombo:volumeIncrementCombo forKey:@"IncrementVolume"]; + [df setKeyCombo:volumeDecrementCombo forKey:@"DecrementVolume"]; + [df setKeyCombo:ratingIncrementCombo forKey:@"IncrementRating"]; + [df setKeyCombo:ratingDecrementCombo forKey:@"DecrementRating"]; + [df setKeyCombo:toggleLoopCombo forKey:@"ToggleLoop"]; + [df setKeyCombo:toggleShuffleCombo forKey:@"ToggleShuffle"]; //Set info checkboxes [df setBool:[albumCheckbox state] forKey:@"showAlbum"]; @@ -191,6 +197,7 @@ static PreferencesController *prefs = nil; @"Previous Track", @"Fast Forward", @"Rewind", + @"Show Player", @"", @"Upcoming Songs", @"Playlists", @@ -264,7 +271,10 @@ static PreferencesController *prefs = nil; } if ([setHotKey isEqualToString:@"PlayPause"]) { if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || - [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo]) && + [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { [window setLevel:NSNormalWindowLevel]; @@ -276,7 +286,10 @@ static PreferencesController *prefs = nil; [playPauseButton setTitle:string]; } else if ([setHotKey isEqualToString:@"NextTrack"]) { if (([combo isEqual:playPauseCombo] || [combo isEqual:prevTrackCombo] || - [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo]) && + [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { [window setLevel:NSNormalWindowLevel]; @@ -288,7 +301,10 @@ static PreferencesController *prefs = nil; [nextTrackButton setTitle:string]; } else if ([setHotKey isEqualToString:@"PrevTrack"]) { if (([combo isEqual:nextTrackCombo] || [combo isEqual:playPauseCombo] || - [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo]) && + [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { [window setLevel:NSNormalWindowLevel]; @@ -300,7 +316,10 @@ static PreferencesController *prefs = nil; [previousTrackButton setTitle:string]; } else if ([setHotKey isEqualToString:@"TrackInfo"]) { if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || - [combo isEqual:playPauseCombo] || [combo isEqual:upcomingSongsCombo]) && + [combo isEqual:playPauseCombo] || [combo isEqual:upcomingSongsCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { [window setLevel:NSNormalWindowLevel]; @@ -312,7 +331,10 @@ static PreferencesController *prefs = nil; [trackInfoButton setTitle:string]; } else if ([setHotKey isEqualToString:@"UpcomingSongs"]) { if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || - [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo]) && + [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { [window setLevel:NSNormalWindowLevel]; @@ -322,38 +344,150 @@ static PreferencesController *prefs = nil; } upcomingSongsCombo = [combo copy]; [upcomingSongsButton setTitle:string]; + //THE NEW COMBOS! + } else if ([setHotKey isEqualToString:@"IncrementVolume"]) { + if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || + [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:upcomingSongsCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && + !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { + + [window setLevel:NSNormalWindowLevel]; + NSRunAlertPanel(@"Duplicate Key Combo", @"Please choose a unique key combo.", @"OK", nil, nil, nil); + [window setLevel:NSStatusWindowLevel]; + return; + } + volumeIncrementCombo = [combo copy]; + [volumeIncrementButton setTitle:string]; + } else if ([setHotKey isEqualToString:@"DecrementVolume"]) { + if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || + [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:upcomingSongsCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && + !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { + + [window setLevel:NSNormalWindowLevel]; + NSRunAlertPanel(@"Duplicate Key Combo", @"Please choose a unique key combo.", @"OK", nil, nil, nil); + [window setLevel:NSStatusWindowLevel]; + return; + } + volumeDecrementCombo = [combo copy]; + [volumeDecrementButton setTitle:string]; + } else if ([setHotKey isEqualToString:@"IncrementRating"]) { + if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || + [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo] || + [combo isEqual:upcomingSongsCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && + !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { + + [window setLevel:NSNormalWindowLevel]; + NSRunAlertPanel(@"Duplicate Key Combo", @"Please choose a unique key combo.", @"OK", nil, nil, nil); + [window setLevel:NSStatusWindowLevel]; + return; + } + ratingIncrementCombo = [combo copy]; + [ratingIncrementButton setTitle:string]; + } else if ([setHotKey isEqualToString:@"DecrementRating"]) { + if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || + [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:upcomingSongsCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:toggleShuffleCombo]) && + !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { + + [window setLevel:NSNormalWindowLevel]; + NSRunAlertPanel(@"Duplicate Key Combo", @"Please choose a unique key combo.", @"OK", nil, nil, nil); + [window setLevel:NSStatusWindowLevel]; + return; + } + ratingDecrementCombo = [combo copy]; + [ratingDecrementButton setTitle:string]; + } else if ([setHotKey isEqualToString:@"ToggleLoop"]) { + if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || + [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:upcomingSongsCombo] || [combo isEqual:toggleShuffleCombo]) && + !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { + + [window setLevel:NSNormalWindowLevel]; + NSRunAlertPanel(@"Duplicate Key Combo", @"Please choose a unique key combo.", @"OK", nil, nil, nil); + [window setLevel:NSStatusWindowLevel]; + return; + } + toggleLoopCombo = [combo copy]; + [toggleLoopButton setTitle:string]; + } else if ([setHotKey isEqualToString:@"ToggleShuffle"]) { + if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || + [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo] || + [combo isEqual:ratingIncrementCombo] || [combo isEqual:ratingDecrementCombo] || + [combo isEqual:volumeIncrementCombo] || [combo isEqual:volumeDecrementCombo] || + [combo isEqual:toggleLoopCombo] || [combo isEqual:upcomingSongsCombo]) && + !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { + + [window setLevel:NSNormalWindowLevel]; + NSRunAlertPanel(@"Duplicate Key Combo", @"Please choose a unique key combo.", @"OK", nil, nil, nil); + [window setLevel:NSStatusWindowLevel]; + return; + } + toggleShuffleCombo = [combo copy]; + [toggleShuffleButton setTitle:string]; } [self cancelHotKey:sender]; } -- (IBAction)setCurrentTrackInfo:(id)sender -{ - [self setKeyCombo:trackInfoCombo]; - [self setHotKey:@"TrackInfo"]; -} - -- (IBAction)setNextTrack:(id)sender -{ - [self setKeyCombo:nextTrackCombo]; - [self setHotKey:@"NextTrack"]; -} - -- (IBAction)setPlayPause:(id)sender -{ - [self setKeyCombo:playPauseCombo]; - [self setHotKey:@"PlayPause"]; -} - -- (IBAction)setPreviousTrack:(id)sender +- (IBAction)setNewHotKey:(id)sender { - [self setKeyCombo:prevTrackCombo]; - [self setHotKey:@"PrevTrack"]; -} - -- (IBAction)setUpcomingSongs:(id)sender -{ - [self setKeyCombo:upcomingSongsCombo]; - [self setHotKey:@"UpcomingSongs"]; + switch ([sender tag]) + { + case 401: + [self setKeyCombo:playPauseCombo]; + [self setHotKey:@"PlayPause"]; + break; + case 402: + [self setKeyCombo:nextTrackCombo]; + [self setHotKey:@"NextTrack"]; + break; + case 403: + [self setKeyCombo:prevTrackCombo]; + [self setHotKey:@"PrevTrack"]; + break; + case 404: + [self setKeyCombo:toggleLoopCombo]; + [self setHotKey:@"ToggleLoop"]; + break; + case 405: + [self setKeyCombo:toggleShuffleCombo]; + [self setHotKey:@"ToggleShuffle"]; + break; + case 406: + [self setKeyCombo:trackInfoCombo]; + [self setHotKey:@"TrackInfo"]; + break; + case 407: + [self setKeyCombo:upcomingSongsCombo]; + [self setHotKey:@"UpcomingSongs"]; + break; + case 408: + [self setKeyCombo:volumeIncrementCombo]; + [self setHotKey:@"IncrementVolume"]; + break; + case 409: + [self setKeyCombo:volumeDecrementCombo]; + [self setHotKey:@"DecrementVolume"]; + break; + case 410: + [self setKeyCombo:ratingIncrementCombo]; + [self setHotKey:@"IncrementRating"]; + break; + case 411: + [self setKeyCombo:ratingDecrementCombo]; + [self setHotKey:@"DecrementRating"]; + break; + } } @@ -447,6 +581,7 @@ static PreferencesController *prefs = nil; @"Previous Track", @"Fast Forward", @"Rewind", + @"Show Player", @"", nil]; @@ -487,28 +622,28 @@ static PreferencesController *prefs = nil; } else { playPauseCombo = [[KeyCombo alloc] init]; } - + if ([df objectForKey:@"NextTrack"]) { nextTrackCombo = [df keyComboForKey:@"NextTrack"]; [nextTrackButton setTitle:[nextTrackCombo userDisplayRep]]; } else { nextTrackCombo = [[KeyCombo alloc] init]; } - + if ([df objectForKey:@"PrevTrack"]) { prevTrackCombo = [df keyComboForKey:@"PrevTrack"]; [previousTrackButton setTitle:[prevTrackCombo userDisplayRep]]; } else { prevTrackCombo = [[KeyCombo alloc] init]; } - + if ([df objectForKey:@"TrackInfo"]) { trackInfoCombo = [df keyComboForKey:@"TrackInfo"]; [trackInfoButton setTitle:[trackInfoCombo userDisplayRep]]; } else { trackInfoCombo = [[KeyCombo alloc] init]; } - + if ([df objectForKey:@"UpcomingSongs"]) { upcomingSongsCombo = [df keyComboForKey:@"UpcomingSongs"]; [upcomingSongsButton setTitle:[upcomingSongsCombo userDisplayRep]]; @@ -516,6 +651,48 @@ static PreferencesController *prefs = nil; upcomingSongsCombo = [[KeyCombo alloc] init]; } + if ([df objectForKey:@"IncrementVolume"]) { + volumeIncrementCombo = [df keyComboForKey:@"IncrementVolume"]; + [volumeIncrementButton setTitle:[volumeIncrementCombo userDisplayRep]]; + } else { + volumeIncrementCombo = [[KeyCombo alloc] init]; + } + + if ([df objectForKey:@"DecrementVolume"]) { + volumeDecrementCombo = [df keyComboForKey:@"DecrementVolume"]; + [volumeDecrementButton setTitle:[volumeDecrementCombo userDisplayRep]]; + } else { + volumeDecrementCombo = [[KeyCombo alloc] init]; + } + + if ([df objectForKey:@"IncrementRating"]) { + ratingIncrementCombo = [df keyComboForKey:@"IncrementRating"]; + [ratingIncrementButton setTitle:[ratingIncrementCombo userDisplayRep]]; + } else { + ratingIncrementCombo = [[KeyCombo alloc] init]; + } + + if ([df objectForKey:@"DecrementRating"]) { + ratingDecrementCombo = [df keyComboForKey:@"DecrementRating"]; + [ratingDecrementButton setTitle:[ratingDecrementCombo userDisplayRep]]; + } else { + ratingDecrementCombo = [[KeyCombo alloc] init]; + } + + if ([df objectForKey:@"ToggleLoop"]) { + toggleLoopCombo = [df keyComboForKey:@"ToggleLoop"]; + [toggleLoopButton setTitle:[toggleLoopCombo userDisplayRep]]; + } else { + toggleLoopCombo = [[KeyCombo alloc] init]; + } + + if ([df objectForKey:@"ToggleShuffle"]) { + toggleShuffleCombo = [df keyComboForKey:@"ToggleShuffle"]; + [toggleShuffleButton setTitle:[toggleShuffleCombo userDisplayRep]]; + } else { + toggleShuffleCombo = [[KeyCombo alloc] init]; + } + // Check current track info buttons [albumCheckbox setState:[df boolForKey:@"showAlbum"] ? NSOnState : NSOffState]; [nameCheckbox setState:[df boolForKey:@"showName"] ? NSOnState : NSOffState]; @@ -526,7 +703,7 @@ static PreferencesController *prefs = nil; [df synchronize]; loginwindow = [[df persistentDomainForName:@"loginwindow"] mutableCopy]; loginarray = [loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"]; - + loginEnum = [loginarray objectEnumerator]; while ( (anItem = [loginEnum nextObject]) ) { if ([[[anItem objectForKey:@"Path"] lastPathComponent] isEqualToString:[[[NSBundle mainBundle] bundlePath] lastPathComponent]]) { -- 2.20.1