X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/1527a78c2e1b1cc525a5c4621077844989aab6fd..a9dfa3e5705fdde676dce25d2c463d08cdb90a0e:/PreferencesController.m diff --git a/PreferencesController.m b/PreferencesController.m index b1c2432..139872a 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -7,13 +7,15 @@ #import "StatusWindowController.h" #import "CustomMenuTableView.h" +#import + #import #import #import #import #import -#import +#import #import #import @@ -42,6 +44,7 @@ - (void)setupCustomizationTables; - (void)setupMenuItems; - (void)setupUI; +- (void)setupScreenPopup; - (void)setStatusWindowEntryEffect:(Class)effectClass; - (void)setStatusWindowExitEffect:(Class)effectClass; - (void)setCustomColor:(NSColor *)color updateWell:(BOOL)update; @@ -97,6 +100,7 @@ static PreferencesController *prefs = nil; @"DecrementRating", @"ToggleShuffle", @"ToggleLoop", + @"ToggleShufflability", @"PopupMenu", @"SetRating0", @"SetRating1", @@ -120,6 +124,7 @@ static PreferencesController *prefs = nil; @"Decrement Rating", @"Toggle Shuffle", @"Toggle Loop", + @"Toggle Song Included In Shuffle", @"Pop-up status menu", [NSString stringWithUTF8String:"Set Rating: ☆☆☆☆☆"], [NSString stringWithUTF8String:"Set Rating: ★☆☆☆☆"], @@ -220,7 +225,9 @@ static PreferencesController *prefs = nil; [self resetRemotePlayerTextFields]; [launchAtLoginCheckbox becomeFirstResponder]; [NSApp activateIgnoringOtherApps:YES]; - [window center]; + if (![window isVisible]) { + [window center]; + } [window orderFrontRegardless]; [window makeKeyWindow]; } @@ -267,7 +274,31 @@ static PreferencesController *prefs = nil; } else if ( [sender tag] == 1120) { mkdir([[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/MenuTunes/Scripts"] cString], 0744); [[NSWorkspace sharedWorkspace] openFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/MenuTunes/Scripts"]]; - } + } else if ( [sender tag] == 6010) { + //Toggle the other Audioscrobbler options + [df setBool:SENDER_STATE forKey:@"audioscrobblerEnabled"]; + [audioscrobblerUseCacheCheckbox setEnabled:SENDER_STATE]; + [audioscrobblerUserTextField setEnabled:SENDER_STATE]; + [audioscrobblerPasswordTextField setEnabled:SENDER_STATE]; + } else if ( [sender tag ] == 6015) { + [df setString:[sender stringValue] forKey:@"audioscrobblerUser"]; + } else if ( [sender tag ] == 6030) { + //Set the password in the keychain + char *service = "Audioscrobbler"; + NSString *account = [df stringForKey:@"audioscrobblerUser"]; + SecKeychainItemRef item; + OSStatus status = SecKeychainFindGenericPassword(NULL, strlen(service), service, [account length], [account UTF8String], NULL, NULL, &item); + if (status == errSecItemNotFound) { + //Create the keychain + } else if (status == noErr) { + //Modify the current item + //SecKeychainItemFreeContent(NULL, item); + } else { + ITDebugLog(@"Audioscrobbler: Unable to retrieve keychain password."); + } + } else if ( [sender tag] == 6045) { + [df setBool:SENDER_STATE forKey:@"audioscrobblerCacheSubmissions"]; + } [df synchronize]; } @@ -464,7 +495,10 @@ static PreferencesController *prefs = nil; } else if ( [sender tag] == 2020) { // Update screen selection. - + [[StatusWindow sharedWindow] setScreen:[[NSScreen screens] objectAtIndex:[sender indexOfSelectedItem]]]; + [df setInteger:[sender indexOfSelectedItem] forKey:@"statusWindowScreenIndex"]; + [(MainController *)controller showCurrentTrackInfo]; + } else if ( [sender tag] == 2030) { [self setStatusWindowEntryEffect:[[sender selectedItem] representedObject]]; @@ -553,6 +587,7 @@ static PreferencesController *prefs = nil; @"upcomingSongs", @"separator", @"preferences", + @"about", @"quit", nil] forKey:@"menu"]; @@ -573,6 +608,7 @@ static PreferencesController *prefs = nil; [df setFloat:4.0 forKey:@"statusWindowVanishDelay"]; [df setInteger:(int)ITWindowPositionBottom forKey:@"statusWindowVerticalPosition"]; [df setInteger:(int)ITWindowPositionLeft forKey:@"statusWindowHorizontalPosition"]; + [df setInteger:0 forKey:@"statusWindowScreenIndex"]; [[StatusWindow sharedWindow] setVerticalPosition:(int)ITWindowPositionBottom]; [[StatusWindow sharedWindow] setHorizontalPosition:(int)ITWindowPositionLeft]; [df setBool:YES forKey:@"showSongInfoOnChange"]; @@ -739,6 +775,8 @@ static PreferencesController *prefs = nil; @"trackInfo", @"upcomingSongs", @"playlists", + @"artists", + @"albums", @"eqPresets", @"songRating", @"playPause", @@ -747,6 +785,7 @@ static PreferencesController *prefs = nil; @"fastForward", @"rewind", @"showPlayer", + @"about", @"quit", nil]; @@ -765,6 +804,8 @@ static PreferencesController *prefs = nil; submenuItems = [[NSArray alloc] initWithObjects: @"upcomingSongs", @"playlists", + @"artists", + @"albums", @"eqPresets", @"songRating", nil]; @@ -777,7 +818,7 @@ static PreferencesController *prefs = nil; NSData *colorData; int selectedBGStyle; id anItem; - + [df setInteger:MT_CURRENT_VERSION forKey:@"appVersion"]; ITDebugLog(@"Setting up preferences UI."); @@ -796,6 +837,9 @@ static PreferencesController *prefs = nil; } } + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setupScreenPopup) name:NSApplicationDidChangeScreenParametersNotification object:nil]; + [self setupScreenPopup]; + ITDebugLog(@"Setting up track info checkboxes."); // Check current track info buttons [albumCheckbox setState:[df boolForKey:@"showAlbum"] ? NSOnState : NSOffState]; @@ -892,6 +936,22 @@ static PreferencesController *prefs = nil; [selectSharedPlayerButton setEnabled:YES]; } + //Setup the Audioscrobbler controls + if ([df boolForKey:@"audioscrobblerEnabled"]) { + [audioscrobblerEnabledCheckbox setState:NSOnState]; + [audioscrobblerUserTextField setEnabled:YES]; + [audioscrobblerPasswordTextField setEnabled:YES]; + [audioscrobblerUseCacheCheckbox setEnabled:YES]; + } else { + [audioscrobblerUserTextField setEnabled:NO]; + [audioscrobblerPasswordTextField setEnabled:NO]; + [audioscrobblerUseCacheCheckbox setEnabled:NO]; + } + [audioscrobblerUserTextField setStringValue:[df stringForKey:@"audioscrobblerUser"]]; + if ([[audioscrobblerUserTextField stringValue] length] > 0) { + [audioscrobblerPasswordTextField setStringValue:@"******"]; + } + [[NSNotificationCenter defaultCenter] addObserver:sharingTableView selector:@selector(reloadData) name:@"ITMTFoundNetService" object:nil]; serverName = [df stringForKey:@"sharedPlayerName"]; @@ -919,6 +979,30 @@ static PreferencesController *prefs = nil; } } +- (void)setupScreenPopup +{ + ITDebugLog(@"Setting up screen popup"); + NSArray *screens = [NSScreen screens]; + if ([screens count] > 1) { + int i, index = [df integerForKey:@"statusWindowScreenIndex"]; + [screenPopup setEnabled:YES]; + for (i = 0; i < [screens count]; i++) { + NSScreen *screen = [screens objectAtIndex:i]; + if (![screen isEqual:[NSScreen mainScreen]]) { + [screenPopup addItemWithTitle:[NSString stringWithFormat:@"Screen %i", i + 1]]; + } + } + [screenPopup selectItemAtIndex:index]; + [[StatusWindow sharedWindow] setScreen:[[NSScreen screens] objectAtIndex:index]]; + } else { + while ([screenPopup numberOfItems] > 1) { + [screenPopup removeItemAtIndex:1]; + } + [screenPopup setEnabled:NO]; + [[StatusWindow sharedWindow] setScreen:[NSScreen mainScreen]]; + } +} + - (void)setStatusWindowEntryEffect:(Class)effectClass { StatusWindow *sw = [StatusWindow sharedWindow]; @@ -1016,6 +1100,8 @@ static PreferencesController *prefs = nil; [df setObject:myItems forKey:@"menu"]; [df synchronize]; + [[controller menuController] performSelector:@selector(rebuildSubmenus) withObject:nil afterDelay:0.0]; + //If we're connected over a network, refresh the menu immediately if ([[NetworkController sharedController] isConnectedToServer]) { [controller timerUpdate]; @@ -1214,6 +1300,7 @@ static PreferencesController *prefs = nil; - (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; [hotKeysArray release]; [hotKeysDictionary release]; [effectClasses release]; @@ -1224,6 +1311,7 @@ static PreferencesController *prefs = nil; [submenuItems release]; [myItems release]; [df release]; + [super dealloc]; } @end