X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/b81329efb2d0f65e9314c35ff491e6f9a9709dc2..081a5fa6db149252a499575da751c45f340312bd:/PreferencesController.m?ds=inline diff --git a/PreferencesController.m b/PreferencesController.m index 9305492..086e2ec 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -1,7 +1,9 @@ #import "PreferencesController.h" #import "MainController.h" -#import "HotKeyCenter.h" +#import +#import #import +#import #define SENDER_STATE (([sender state] == NSOnState) ? YES : NO) @@ -85,6 +87,10 @@ static PreferencesController *prefs = nil; [self setupMenuItems]; // Setup the arrays of menu items [self setupUI]; // Sets up additional UI [window setDelegate:self]; + [menuTableView reloadData]; + + //Change the launch player checkbox to the proper name + [launchPlayerAtLaunchCheckbox setTitle:[NSString stringWithFormat:@"Launch %@ when MenuTunes launches", [[controller currentRemote] playerSimpleName]]]; //This isn't localized... } [window setLevel:NSStatusWindowLevel]; @@ -95,41 +101,27 @@ static PreferencesController *prefs = nil; - (IBAction)changeGeneralSetting:(id)sender { - BOOL rebuildRequired = NO; - if ( [sender tag] == 1010) { [self setLaunchesAtLogin:SENDER_STATE]; } else if ( [sender tag] == 1020) { [df setBool:SENDER_STATE forKey:@"LaunchPlayerWithMT"]; } else if ( [sender tag] == 1030) { [df setInteger:[sender intValue] forKey:@"SongsInAdvance"]; - rebuildRequired = YES; + } else if ( [sender tag] == 1040) { // This will not be executed. Song info always shows the title of the song. // [df setBool:SENDER_STATE forKey:@"showName"]; - // rebuildRequired = YES; } else if ( [sender tag] == 1050) { [df setBool:SENDER_STATE forKey:@"showArtist"]; - rebuildRequired = YES; } else if ( [sender tag] == 1060) { [df setBool:SENDER_STATE forKey:@"showAlbum"]; - rebuildRequired = YES; } else if ( [sender tag] == 1070) { [df setBool:SENDER_STATE forKey:@"showTime"]; - rebuildRequired = YES; } else if ( [sender tag] == 1080) { [df setBool:SENDER_STATE forKey:@"showTrackNumber"]; - rebuildRequired = YES; } else if ( [sender tag] == 1090) { [df setBool:SENDER_STATE forKey:@"showTrackRating"]; - rebuildRequired = YES; } - - if ( rebuildRequired ) { - [controller rebuildMenu]; - // redraw song info status window, or upcoming songs here - } - [df synchronize]; } @@ -159,6 +151,7 @@ static PreferencesController *prefs = nil; - (IBAction)changeHotKey:(id)sender { + [controller clearHotKeys]; switch ([sender tag]) { case 4010: @@ -174,8 +167,8 @@ static PreferencesController *prefs = nil; [self setCurrentHotKey:@"PrevTrack"]; break; case 4035: - [self setKeyCombo:[hotKeysDictionary objectForKey:@"ToggleVisualizer"]]; - [self setCurrentHotKey:@"ToggleVisualizer"]; + [self setKeyCombo:[hotKeysDictionary objectForKey:@"ShowPlayer"]]; + [self setCurrentHotKey:@"ShowPlayer"]; break; case 4040: [self setKeyCombo:[hotKeysDictionary objectForKey:@"ToggleLoop"]]; @@ -221,21 +214,22 @@ static PreferencesController *prefs = nil; id anItem; [df setObject:[NSArray arrayWithObjects: - @"Play/Pause", - @"Next Track", - @"Previous Track", - @"Fast Forward", - @"Rewind", - @"Show Player", - @"", - @"Upcoming Songs", - @"Playlists", - @"Song Rating", - @"", - @"PreferencesÉ", - @"Quit", - @"", - @"Current Track Info", + @"playPause", + @"prevTrack", + @"nextTrack", + @"fastForward", + @"rewind", + @"showPlayer", + @"separator", + @"songRating", + @"eqPresets", + @"playlists", + @"upcomingSongs", + @"separator", + @"preferences", + @"quit", + @"separator", + @"trackInfo", nil] forKey:@"menu"]; [df setInteger:5 forKey:@"SongsInAdvance"]; @@ -261,7 +255,7 @@ static PreferencesController *prefs = nil; // This is teh sux // We must fix it so it is no longer suxy if (!found) { - if (NSRunInformationalAlertPanel(@"Auto-launch MenuTunes", @"Would you like MenuTunes to automatically launch at login?", @"Yes", @"No", nil) == NSOKButton) { + if (NSRunInformationalAlertPanel(NSLocalizedString(@"autolaunch", @"Auto-launch MenuTunes"), NSLocalizedString(@"autolaunch_msg", @"Would you like MenuTunes to automatically launch at login?"), @"Yes", @"No", nil) == NSOKButton) { AEDesc scriptDesc, resultDesc; NSString *script = [NSString stringWithFormat:@"tell application \"System Events\"\nmake new login item at end of login items with properties {path:\"%@\", kind:\"APPLICATION\"}\nend tell", [[NSBundle mainBundle] bundlePath]]; ComponentInstance asComponent = OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype); @@ -288,15 +282,14 @@ static PreferencesController *prefs = nil; - (IBAction)clearHotKey:(id)sender { - [self setKeyCombo:[KeyCombo clearKeyCombo]]; + [self setKeyCombo:[ITKeyCombo clearKeyCombo]]; } - (IBAction)okHotKey:(id)sender { - NSString *string = [combo userDisplayRep]; + NSString *string = [combo description]; NSEnumerator *enumerator = [hotKeysDictionary keyEnumerator]; NSString *enumKey; - BOOL duplicateCombo = NO; if (string == nil) { string = @""; @@ -304,19 +297,19 @@ static PreferencesController *prefs = nil; while ( (enumKey = [enumerator nextObject]) ) { if (![enumKey isEqualToString:currentHotKey]) { - if (![combo isEqual:[KeyCombo clearKeyCombo]] && + if (![combo isEqual:[ITKeyCombo clearKeyCombo]] && [combo isEqual:[hotKeysDictionary objectForKey:enumKey]]) { [window setLevel:NSNormalWindowLevel]; - if ( NSRunAlertPanel(@"Duplicate Key Combo", @"The specified key combo is already in use...", @"Replace", @"Cancel", nil) ) { - [hotKeysDictionary setObject:[KeyCombo clearKeyCombo] forKey:currentHotKey]; + if ( NSRunAlertPanel(NSLocalizedString(@"duplicateCombo", @"Duplicate Key Combo") , NSLocalizedString(@"duplicateCombo_msg", @"The specified key combo is already in use..."), NSLocalizedString(@"replace", @"Replace"), NSLocalizedString(@"cancel", @"Cancel"), nil) ) { + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:currentHotKey]; if ([enumKey isEqualToString:@"PlayPause"]) { [playPauseButton setTitle:@""]; } else if ([enumKey isEqualToString:@"NextTrack"]) { [nextTrackButton setTitle:@""]; } else if ([enumKey isEqualToString:@"PrevTrack"]) { [previousTrackButton setTitle:@""]; - } else if ([enumKey isEqualToString:@"ToggleVisualizer"]) { - [visualizerButton setTitle:@""]; + } else if ([enumKey isEqualToString:@"ShowPlayer"]) { + [showPlayerButton setTitle:@""]; } else if ([enumKey isEqualToString:@"TrackInfo"]) { [trackInfoButton setTitle:@""]; } else if ([enumKey isEqualToString:@"UpcomingSongs"]) { @@ -334,7 +327,7 @@ static PreferencesController *prefs = nil; } else if ([enumKey isEqualToString:@"ToggleLoop"]) { [toggleLoopButton setTitle:@""]; } - [df setKeyCombo:[KeyCombo clearKeyCombo] forKey:enumKey]; + [df setObject:[[ITKeyCombo clearKeyCombo] plistRepresentation] forKey:enumKey]; } else { return; } @@ -343,37 +336,35 @@ static PreferencesController *prefs = nil; } } - 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]; - } - //[controller rebuildMenu]; - } + [hotKeysDictionary setObject:combo forKey:currentHotKey]; + [df setObject:[combo plistRepresentation] 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:@"ShowPlayer"]) { + [showPlayerButton 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]; + } + [controller setupHotKeys]; [self cancelHotKey:sender]; } @@ -388,31 +379,22 @@ static PreferencesController *prefs = nil; { [currentHotKey autorelease]; currentHotKey = [key copy]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyEvent:) name:@"KeyBroadcasterEvent" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyEvent:) name:ITKeyBroadcasterKeyEvent object:nil]; [NSApp beginSheet:keyComboPanel modalForWindow:window modalDelegate:self didEndSelector:nil contextInfo:nil]; } - (void)keyEvent:(NSNotification *)note { - NSDictionary *info = [note userInfo]; - short keyCode; - long modifiers; - KeyCombo *newCombo; - - keyCode = [[info objectForKey:@"KeyCode"] shortValue]; - modifiers = [[info objectForKey:@"Modifiers"] longValue]; - - newCombo = [[KeyCombo alloc] initWithKeyCode:keyCode andModifiers:modifiers]; - [self setKeyCombo:newCombo]; + [self setKeyCombo:[[[note userInfo] objectForKey:@"keyCombo"] copy]]; } -- (void)setKeyCombo:(KeyCombo *)newCombo +- (void)setKeyCombo:(ITKeyCombo *)newCombo { NSString *string; [combo release]; combo = [newCombo copy]; - string = [combo userDisplayRep]; + string = [combo description]; if (string == nil) { string = @""; } @@ -427,8 +409,8 @@ static PreferencesController *prefs = nil; - (void)setupWindow { - if ( ! [NSBundle loadNibNamed:@"Preferences" owner:self] ) { - NSLog( @"Failed to load Preferences.nib" ); + if (![NSBundle loadNibNamed:@"Preferences" owner:self]) { + NSLog(@"MenuTunes: Failed to load Preferences.nib"); NSBeep(); return; } @@ -460,18 +442,18 @@ static PreferencesController *prefs = nil; id anItem; // Set the list of items you can have. availableItems = [[NSMutableArray alloc] initWithObjects: - @"Current Track Info", - @"Upcoming Songs", - @"Playlists", - @"EQ Presets", - @"Song Rating", - @"Play/Pause", - @"Next Track", - @"Previous Track", - @"Fast Forward", - @"Rewind", - @"Show Player", - @"", + @"trackInfo", + @"upcomingSongs", + @"playlists", + @"eqPresets", + @"songRating", + @"playPause", + @"nextTrack", + @"prevTrack", + @"fastForward", + @"rewind", + @"showPlayer", + @"separator", nil]; // Get our preferred menu @@ -480,17 +462,17 @@ static PreferencesController *prefs = nil; // Delete items in the availableItems array that are already part of the menu itemEnum = [myItems objectEnumerator]; while ( (anItem = [itemEnum nextObject]) ) { - if ( ! [anItem isEqualToString:@""] ) { + if (![anItem isEqualToString:@"separator"]) { [availableItems removeObject:anItem]; } } // Items that show should a submenu image submenuItems = [[NSArray alloc] initWithObjects: - @"Upcoming Songs", - @"Playlists", - @"EQ Presets", - @"Song Rating", + @"upcomingSongs", + @"playlists", + @"eqPresets", + @"songRating", nil]; } @@ -505,100 +487,112 @@ static PreferencesController *prefs = nil; [songsInAdvance setIntValue:[df integerForKey:@"SongsInAdvance"]]; // Fill in hot key buttons - if ([df objectForKey:@"PlayPause"]){ - anItem = [df keyComboForKey:@"PlayPause"]; + if ([df objectForKey:@"PlayPause"]) { + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PlayPause"]]; [hotKeysDictionary setObject:anItem forKey:@"PlayPause"]; - [playPauseButton setTitle:[anItem userDisplayRep]]; + [playPauseButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"PlayPause"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"PlayPause"]; + [playPauseButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"NextTrack"]) { - anItem = [df keyComboForKey:@"NextTrack"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"NextTrack"]]; [hotKeysDictionary setObject:anItem forKey:@"NextTrack"]; - [nextTrackButton setTitle:[anItem userDisplayRep]]; + [nextTrackButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"NextTrack"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"NextTrack"]; + [nextTrackButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"PrevTrack"]) { - anItem = [df keyComboForKey:@"PrevTrack"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"PrevTrack"]]; [hotKeysDictionary setObject:anItem forKey:@"PrevTrack"]; - [previousTrackButton setTitle:[anItem userDisplayRep]]; + [previousTrackButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"PrevTrack"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"PrevTrack"]; + [previousTrackButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } - if ([df objectForKey:@"ToggleVisualizer"]) { - anItem = [df keyComboForKey:@"ToggleVisualizer"]; - [hotKeysDictionary setObject:anItem forKey:@"ToggleVisualizer"]; - [visualizerButton setTitle:[anItem userDisplayRep]]; + if ([df objectForKey:@"ShowPlayer"]) { + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ShowPlayer"]]; + [hotKeysDictionary setObject:anItem forKey:@"ShowPlayer"]; + [showPlayerButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"ToggleVisualizer"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"ShowPlayer"]; + [showPlayerButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"TrackInfo"]) { - anItem = [df keyComboForKey:@"TrackInfo"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"TrackInfo"]]; [hotKeysDictionary setObject:anItem forKey:@"TrackInfo"]; - [trackInfoButton setTitle:[anItem userDisplayRep]]; + [trackInfoButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"TrackInfo"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"TrackInfo"]; + [trackInfoButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"UpcomingSongs"]) { - anItem = [df keyComboForKey:@"UpcomingSongs"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"UpcomingSongs"]]; [hotKeysDictionary setObject:anItem forKey:@"UpcomingSongs"]; - [upcomingSongsButton setTitle:[anItem userDisplayRep]]; + [upcomingSongsButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"UpcomingSongs"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"UpcomingSongs"]; + [upcomingSongsButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"IncrementVolume"]) { - anItem = [df keyComboForKey:@"IncrementVolume"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementVolume"]]; [hotKeysDictionary setObject:anItem forKey:@"IncrementVolume"]; - [volumeIncrementButton setTitle:[anItem userDisplayRep]]; + [volumeIncrementButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"IncrementVolume"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"IncrementVolume"]; + [volumeIncrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"DecrementVolume"]) { - anItem = [df keyComboForKey:@"DecrementVolume"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementVolume"]]; [hotKeysDictionary setObject:anItem forKey:@"DecrementVolume"]; - [volumeDecrementButton setTitle:[anItem userDisplayRep]]; + [volumeDecrementButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"DecrementVolume"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"DecrementVolume"]; + [volumeDecrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"IncrementRating"]) { - anItem = [df keyComboForKey:@"IncrementRating"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"IncrementRating"]]; [hotKeysDictionary setObject:anItem forKey:@"IncrementRating"]; - [ratingIncrementButton setTitle:[anItem userDisplayRep]]; + [ratingIncrementButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"IncrementRating"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"IncrementRating"]; + [ratingIncrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"DecrementRating"]) { - anItem = [df keyComboForKey:@"DecrementRating"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"DecrementRating"]]; [hotKeysDictionary setObject:anItem forKey:@"DecrementRating"]; - [ratingDecrementButton setTitle:[anItem userDisplayRep]]; + [ratingDecrementButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"DecrementRating"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"DecrementRating"]; + [ratingDecrementButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"ToggleLoop"]) { - anItem = [df keyComboForKey:@"ToggleLoop"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleLoop"]]; [hotKeysDictionary setObject:anItem forKey:@"ToggleLoop"]; - [toggleLoopButton setTitle:[anItem userDisplayRep]]; + [toggleLoopButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"ToggleLoop"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"ToggleLoop"]; + [toggleLoopButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } if ([df objectForKey:@"ToggleShuffle"]) { - anItem = [df keyComboForKey:@"ToggleShuffle"]; + anItem = [ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ToggleShuffle"]]; [hotKeysDictionary setObject:anItem forKey:@"ToggleShuffle"]; - [toggleShuffleButton setTitle:[anItem userDisplayRep]]; + [toggleShuffleButton setTitle:[anItem description]]; } else { - [hotKeysDictionary setObject:[KeyCombo keyCombo] forKey:@"ToggleShuffle"]; + [hotKeysDictionary setObject:[ITKeyCombo clearKeyCombo] forKey:@"ToggleShuffle"]; + [toggleShuffleButton setTitle:[[ITKeyCombo clearKeyCombo] description]]; } // Check current track info buttons @@ -607,6 +601,7 @@ static PreferencesController *prefs = nil; [nameCheckbox setEnabled:NO]; // Song info will ALWAYS show song title. [artistCheckbox setState:[df boolForKey:@"showArtist"] ? NSOnState : NSOffState]; [trackTimeCheckbox setState:[df boolForKey:@"showTime"] ? NSOnState : NSOffState]; + [trackNumberCheckbox setState:[df boolForKey:@"showTrackNumber"] ? NSOnState : NSOffState]; // Set the launch at login checkbox state [df synchronize]; @@ -625,7 +620,6 @@ static PreferencesController *prefs = nil; { [df setObject:myItems forKey:@"menu"]; [df synchronize]; - [controller rebuildMenu]; } - (void)setLaunchesAtLogin:(BOOL)flag @@ -633,7 +627,7 @@ static PreferencesController *prefs = nil; if ( flag ) { NSMutableDictionary *loginwindow; NSMutableArray *loginarray; - ComponentInstance temp = OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype);; + ComponentInstance temp = OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype); int i; BOOL skip = NO; @@ -715,9 +709,9 @@ static PreferencesController *prefs = nil; if ([[aTableColumn identifier] isEqualToString:@"name"]) { NSString *object = [myItems objectAtIndex:rowIndex]; if ([object isEqualToString:@"Show Player"]) { - return [NSString stringWithFormat:@"Show %@", [[controller currentRemote] playerSimpleName]]; + return [NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"show", @"Show"), [[controller currentRemote] playerSimpleName]]; } - return object; + return NSLocalizedString(object, @"ERROR"); } else { if ([submenuItems containsObject:[myItems objectAtIndex:rowIndex]]) { @@ -728,7 +722,7 @@ static PreferencesController *prefs = nil; } } else { if ([[aTableColumn identifier] isEqualToString:@"name"]) { - return [availableItems objectAtIndex:rowIndex]; + return NSLocalizedString([availableItems objectAtIndex:rowIndex], @"ERROR"); } else { if ([submenuItems containsObject:[availableItems objectAtIndex:rowIndex]]) { return [NSImage imageNamed:@"submenu"]; @@ -767,28 +761,30 @@ static PreferencesController *prefs = nil; dragData = [pb stringForType:@"MenuTableViewPboardType"]; dragRow = [dragData intValue]; temp = [myItems objectAtIndex:dragRow]; - [myItems removeObjectAtIndex:dragRow]; if (tableView == menuTableView) { + [myItems insertObject:temp atIndex:row]; if (row > dragRow) { - [myItems insertObject:temp atIndex:row - 1]; + [myItems removeObjectAtIndex:dragRow]; } else { - [myItems insertObject:temp atIndex:row]; + [myItems removeObjectAtIndex:dragRow + 1]; } } else { - if (![temp isEqualToString:@""]) { + if (![temp isEqualToString:@"separator"]) { [availableItems addObject:temp]; } + [myItems removeObjectAtIndex:dragRow]; } } else if ([[pb types] containsObject:@"AllTableViewPboardType"]) { dragData = [pb stringForType:@"AllTableViewPboardType"]; dragRow = [dragData intValue]; temp = [availableItems objectAtIndex:dragRow]; - if (![temp isEqualToString:@""]) { + [myItems insertObject:temp atIndex:row]; + + if (![temp isEqualToString:@"separator"]) { [availableItems removeObjectAtIndex:dragRow]; } - [myItems insertObject:temp atIndex:row]; } [menuTableView reloadData]; @@ -806,7 +802,7 @@ static PreferencesController *prefs = nil; if ([[[info draggingPasteboard] types] containsObject:@"MenuTableViewPboardType"]) { NSString *item = [myItems objectAtIndex:[[[info draggingPasteboard] stringForType:@"MenuTableViewPboardType"] intValue]]; - if ([item isEqualToString:@"PreferencesÉ"] || [item isEqualToString:@"Quit"]) { + if ([item isEqualToString:@"Preferences"] || [item isEqualToString:@"Quit"]) { return NSDragOperationNone; } }