X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/da05d51282a00722e05f2c777db5cc3d0623d348..0605ae7fa0f13acc07644b5e09b3f4187518b3d8:/PreferencesController.m diff --git a/PreferencesController.m b/PreferencesController.m index 4141086..e7421f4 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -16,6 +16,7 @@ #import #import +#import #import #import #import @@ -35,6 +36,7 @@ - (void)setupCustomizationTables; - (void)setupMenuItems; - (void)setupUI; +- (void)setCustomColor:(NSColor *)color updateWell:(BOOL)update; - (IBAction)changeMenus:(id)sender; - (void)setLaunchesAtLogin:(BOOL)flag; @end @@ -100,6 +102,7 @@ static PreferencesController *prefs = nil; controller = nil; [self setupWindow]; // Load in the nib, and perform any initial setup. + [[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; } return self; } @@ -130,8 +133,11 @@ static PreferencesController *prefs = nil; - (BOOL)showPasswordPanel { [passwordPanel setLevel:NSStatusWindowLevel]; - [passwordPanelOKButton setTitle:@"OK"]; + [passwordPanelOKButton setTitle:@"Connect"]; + [passwordPanelTitle setStringValue:@"Password Required"]; [passwordPanelMessage setStringValue:[NSString stringWithFormat:@"Please enter a password for access to the MenuTunes player named %@ at %@.", [[[NetworkController sharedController] networkObject] serverName], [[NetworkController sharedController] remoteHost]]]; + [passwordPanel center]; + [passwordPanel setLevel:NSStatusWindowLevel]; [passwordPanel makeKeyAndOrderFront:nil]; if ([NSApp runModalForWindow:passwordPanel]) { return YES; @@ -144,7 +150,10 @@ static PreferencesController *prefs = nil; { [passwordPanel setLevel:NSStatusWindowLevel]; [passwordPanelOKButton setTitle:@"Retry"]; + [passwordPanelTitle setStringValue:@"Invalid Password"]; [passwordPanelMessage setStringValue:[NSString stringWithFormat:@"The password entered for access to the MenuTunes player named %@ at %@ is invalid. Please provide a new password.", [[[NetworkController sharedController] networkObject] serverName], [[NetworkController sharedController] remoteHost]]]; + [passwordPanel center]; + [passwordPanel setLevel:NSStatusWindowLevel]; [passwordPanel makeKeyAndOrderFront:nil]; if ([NSApp runModalForWindow:passwordPanel]) { return YES; @@ -156,7 +165,7 @@ static PreferencesController *prefs = nil; - (IBAction)showPrefsWindow:(id)sender { ITDebugLog(@"Showing preferences window."); - if (! window) { // If window does not exist yet, then the nib hasn't been loaded. + if (!myItems) { // If menu array does not exist yet, then the window hasn't been setup. ITDebugLog(@"Window doesn't exist, initial setup."); [self setupCustomizationTables]; // Setup the DnD manu config tables. [self setupMenuItems]; // Setup the arrays of menu items @@ -178,6 +187,11 @@ static PreferencesController *prefs = nil; [window performSelector:@selector(makeKeyAndOrderFront:) withObject:self afterDelay:0.0]; } +- (IBAction)showTestWindow:(id)sender +{ + [controller showTestWindow]; +} + - (IBAction)changeGeneralSetting:(id)sender { ITDebugLog(@"Changing general setting of tag %i.", [sender tag]); @@ -246,7 +260,7 @@ static PreferencesController *prefs = nil; [nameTextField setEnabled:NO]; [selectSharedPlayerButton setEnabled:state]; - if (state && [controller connectToServer]) { + if (state && ([controller connectToServer] == 1)) { [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; } else { @@ -258,10 +272,22 @@ static PreferencesController *prefs = nil; } } else if ( [sender tag] == 5050 ) { - //Do nothing on table view click + //If no player is selected in the table view, turn off OK button. + if ([sender clickedRow] == -1 ) { + [sharingPanelOKButton setEnabled:NO]; + } else { + [sharingPanelOKButton setEnabled:YES]; + } } else if ( [sender tag] == 5051 ) { [df setObject:[sender stringValue] forKey:@"sharedPlayerHost"]; } else if ( [sender tag] == 5060 ) { + //Set OK button state + if (([selectPlayerBox contentView] == zeroConfView && [sharingTableView selectedRow] == -1) || + ([selectPlayerBox contentView] == manualView && [[hostTextField stringValue] length] == 0)) { + [sharingPanelOKButton setEnabled:NO]; + } else { + [sharingPanelOKButton setEnabled:YES]; + } //Show selection sheet [NSApp beginSheet:selectPlayerSheet modalForWindow:window modalDelegate:self didEndSelector:NULL contextInfo:nil]; } else if ( [sender tag] == 5100 ) { @@ -270,13 +296,20 @@ static PreferencesController *prefs = nil; NSRect frame = [selectPlayerSheet frame]; frame.origin.y -= 58; frame.size.height = 273; + if ([sharingTableView selectedRow] == -1) { + [sharingPanelOKButton setEnabled:NO]; + } [selectPlayerBox setContentView:zeroConfView]; [selectPlayerSheet setFrame:frame display:YES animate:YES]; } else if ( ([sender indexOfItem:[sender selectedItem]] == 1) && ([selectPlayerBox contentView] != manualView) ){ NSRect frame = [selectPlayerSheet frame]; frame.origin.y += 58; frame.size.height = 215; - //[window makeFirstResponder:hostTextField]; + if ([[hostTextField stringValue] length] == 0) { + [sharingPanelOKButton setEnabled:NO]; + } else { + [sharingPanelOKButton setEnabled:YES]; + } [selectPlayerBox setContentView:manualView]; [selectPlayerSheet setFrame:frame display:YES animate:YES]; [hostTextField selectText:nil]; @@ -309,7 +342,7 @@ static PreferencesController *prefs = nil; } } - if ([controller connectToServer]) { + if ([controller connectToServer] == 1) { [useSharedMenuTunesCheckbox setState:NSOnState]; [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; @@ -339,6 +372,8 @@ static PreferencesController *prefs = nil; if ( [sender tag] == 2010) { [df setInteger:[sender selectedRow] forKey:@"statusWindowVerticalPosition"]; [df setInteger:[sender selectedColumn] forKey:@"statusWindowHorizontalPosition"]; + [sw setHorizontalPosition:[sender selectedColumn]]; + [sw setVerticalPosition:[sender selectedRow]]; // update the window's position here } else if ( [sender tag] == 2020) { // update screen selection @@ -394,10 +429,61 @@ static PreferencesController *prefs = nil; [sw setExitDelay:[sender floatValue]]; } else if ( [sender tag] == 2080) { [df setBool:SENDER_STATE forKey:@"showSongInfoOnChange"]; + } else if ( [sender tag] == 2090) { + + int setting = [sender indexOfSelectedItem]; + + if ( setting == 0 ) { + [(ITTSWBackgroundView *)[sw contentView] setBackgroundMode:ITTSWBackgroundApple]; + [backgroundColorWell setEnabled:NO]; + [backgroundColorPopup setEnabled:NO]; + } else if ( setting == 1 ) { + [(ITTSWBackgroundView *)[sw contentView] setBackgroundMode:ITTSWBackgroundReadable]; + [backgroundColorWell setEnabled:NO]; + [backgroundColorPopup setEnabled:NO]; + } else if ( setting == 2 ) { + [(ITTSWBackgroundView *)[sw contentView] setBackgroundMode:ITTSWBackgroundColored]; + [backgroundColorWell setEnabled:YES]; + [backgroundColorPopup setEnabled:YES]; + } + + [df setInteger:setting forKey:@"statusWindowBackgroundMode"]; + + } else if ( [sender tag] == 2091) { + [self setCustomColor:[sender color] updateWell:NO]; + } else if ( [sender tag] == 2092) { + + int selectedItem = [sender indexOfSelectedItem]; + + if ( selectedItem == 1 ) { // An NSPopUpButton in PullDown mode uses item 0 as its title. Its first selectable item is 1. + [self setCustomColor:[NSColor colorWithCalibratedRed:0.92549 green:0.686275 blue:0.0 alpha:1.0] updateWell:YES]; + } else if ( selectedItem == 2 ) { + [self setCustomColor:[NSColor colorWithCalibratedRed:0.380392 green:0.670588 blue:0.0 alpha:1.0] updateWell:YES]; + } else if ( selectedItem == 3 ) { + [self setCustomColor:[NSColor colorWithCalibratedRed:0.443137 green:0.231373 blue:0.619608 alpha:1.0] updateWell:YES]; + } else if ( selectedItem == 4 ) { + [self setCustomColor:[NSColor colorWithCalibratedRed:0.831373 green:0.12549 blue:0.509804 alpha:1.0] updateWell:YES]; + } else if ( selectedItem == 5 ) { + [self setCustomColor:[NSColor colorWithCalibratedRed:0.00784314 green:0.611765 blue:0.662745 alpha:1.0] updateWell:YES]; + } else { + [self setCustomColor:[NSColor colorWithCalibratedWhite:0.15 alpha:0.70] updateWell:YES]; + } + } + [df synchronize]; } +- (void)setCustomColor:(NSColor *)color updateWell:(BOOL)update +{ + [(ITTSWBackgroundView *)[[StatusWindow sharedWindow] contentView] setBackgroundColor:color]; + [df setObject:[NSArchiver archivedDataWithRootObject:color] forKey:@"statusWindowBackgroundColor"]; + + if ( update ) { + [backgroundColorWell setColor:color]; + } +} + - (void)registerDefaults { BOOL found = NO; @@ -491,6 +577,17 @@ static PreferencesController *prefs = nil; } } +- (void)resetRemotePlayerTextFields +{ + if ([[NetworkController sharedController] isConnectedToServer]) { + [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; + [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; + } else { + [selectedPlayerTextField setStringValue:@"No shared player selected."]; + [locationTextField setStringValue:@"-"]; + } +} + /*************************************************************************/ #pragma mark - #pragma mark HOTKEY SUPPORT METHODS @@ -630,6 +727,7 @@ static PreferencesController *prefs = nil; NSMutableArray *loginarray; NSEnumerator *loginEnum, *keyArrayEnum; NSString *serverName; + int selectedBGStyle; id anItem; ITDebugLog(@"Setting up preferences UI."); @@ -683,8 +781,23 @@ static PreferencesController *prefs = nil; [appearanceSpeedSlider setFloatValue:-([df floatForKey:@"statusWindowAppearanceSpeed"])]; [vanishSpeedSlider setFloatValue:-([df floatForKey:@"statusWindowVanishSpeed"])]; [vanishDelaySlider setFloatValue:[df floatForKey:@"statusWindowVanishDelay"]]; - [showOnChangeCheckbox setState:([df boolForKey:@"showSongInfoOnChange"] ? NSOnState : NSOffState)]; + + // Setup General Controls + selectedBGStyle = [df integerForKey:@"statusWindowBackgroundMode"]; + [backgroundStylePopup selectItem:[backgroundStylePopup itemAtIndex:[backgroundStylePopup indexOfItemWithTag:selectedBGStyle]]]; + + if ( selectedBGStyle == ITTSWBackgroundColored ) { + [backgroundColorWell setEnabled:YES]; + [backgroundColorPopup setEnabled:YES]; + } else { + [backgroundColorWell setEnabled:NO]; + [backgroundColorPopup setEnabled:NO]; + } + + [backgroundColorWell setColor:(NSColor *)[NSUnarchiver unarchiveObjectWithData:[df dataForKey:@"statusWindowBackgroundColor"]]]; + [showOnChangeCheckbox setState:([df boolForKey:@"showSongInfoOnChange"] ? NSOnState : NSOffState)]; + // Setup the sharing controls if ([df boolForKey:@"enableSharing"]) { [shareMenuTunesCheckbox setState:NSOnState]; @@ -773,6 +886,21 @@ static PreferencesController *prefs = nil; [(MainController *)controller closePreferences]; } +/*************************************************************************/ +#pragma mark - +#pragma mark NSTextField DELEGATE METHODS +/*************************************************************************/ + +- (void)controlTextDidChange:(NSNotification*)note +{ + if ([note object] == hostTextField) { + if ([[hostTextField stringValue] length] == 0) { + [sharingPanelOKButton setEnabled:NO]; + } else { + [sharingPanelOKButton setEnabled:YES]; + } + } +} /*************************************************************************/ #pragma mark - @@ -798,7 +926,7 @@ static PreferencesController *prefs = nil; NSString *object = [myItems objectAtIndex:rowIndex]; if ([[aTableColumn identifier] isEqualToString:@"name"]) { if ([object isEqualToString:@"showPlayer"]) { - NSString *string; + NSString *string = nil; NS_DURING string = [NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"show", @"Show"), [[controller currentRemote] playerSimpleName]]; NS_HANDLER @@ -819,7 +947,7 @@ static PreferencesController *prefs = nil; NSString *object = [availableItems objectAtIndex:rowIndex]; if ([[aTableColumn identifier] isEqualToString:@"name"]) { if ([object isEqualToString:@"showPlayer"]) { - NSString *string; + NSString *string = nil; NS_DURING string = [NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"show", @"Show"), [[controller currentRemote] playerSimpleName]]; NS_HANDLER