X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/dae4c6a0436263f8476c93c693971a2c82ddd596..4b426dd2e4cb2a9efccdba130dfaf86f735f58b5:/PreferencesController.m?ds=sidebyside diff --git a/PreferencesController.m b/PreferencesController.m index 5a83ffb..8acaab7 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -10,10 +10,10 @@ int i; NSImageCell *imgCell = [[[NSImageCell alloc] init] autorelease]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *temp; mt = [tunes retain]; - + [mt registerDefaultsIfNeeded]; + //Load the nib [NSBundle loadNibNamed:@"Preferences" owner:self]; @@ -32,15 +32,10 @@ [allTableView registerForDraggedTypes:[NSArray arrayWithObjects:@"MenuTableViewPboardType", @"AllTableViewPboardType", nil]]; //Set the list of items you can have. - availableItems = [[NSMutableArray alloc] initWithObjects:@"Current Track Info", @"Upcoming Songs", @"Playlists", @"EQ Presets", @"Play/Pause", @"Next Track", @"Previous Track", @"Fast Forward", @"Rewind", @"", nil]; + availableItems = [[NSMutableArray alloc] initWithObjects:@"Current Track Info", @"Upcoming Songs", @"Playlists", @"EQ Presets", @"Song Rating", @"Play/Pause", @"Next Track", @"Previous Track", @"Fast Forward", @"Rewind", @"", nil]; //Get our preferred menu myItems = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"menu"] mutableCopy]; - if (myItems == nil) - { - myItems = [[NSMutableArray alloc] initWithObjects:@"Play/Pause", @"Next Track", @"Previous Track", @"Fast Forward", @"Rewind", @"", @"Upcoming Songs", @"Playlists", @"EQ Presets", @"", @"PreferencesÉ", @"Quit", @"", @"Current Track Info", nil]; - [[NSUserDefaults standardUserDefaults] setObject:myItems forKey:@"menu"]; - } //Delete items in the availableItems array that are already part of the menu for (i = 0; i < [myItems count]; i++) { @@ -52,14 +47,10 @@ } //Items that show should a submenu image - submenuItems = [[NSArray alloc] initWithObjects:@"Upcoming Songs", @"Playlists", @"EQ Presets", nil]; + submenuItems = [[NSArray alloc] initWithObjects:@"Upcoming Songs", @"Playlists", @"EQ Presets", @"Song Rating", nil]; //Fill in the number of songs in advance to show field - if ([defaults integerForKey:@"SongsInAdvance"]) { - [songsInAdvance setIntValue:[defaults integerForKey:@"SongsInAdvance"]]; - } else { - [songsInAdvance setIntValue:5]; - } + [songsInAdvance setIntValue:[defaults integerForKey:@"SongsInAdvance"]]; //Fill in hot key buttons if ([defaults objectForKey:@"PlayPause"]){ @@ -98,24 +89,8 @@ } //Check current track info buttons - - //Album and name get special treatment because they are defaults - if ( (temp = [defaults stringForKey:@"showAlbum"]) ) { - if ((temp == nil) || [temp isEqualToString:@"1"]) { - [albumCheckbox setState:NSOnState]; - } else { - [albumCheckbox setState:NSOffState]; - } - } - - if ( (temp = [defaults stringForKey:@"showName"]) ) { - if ((temp == nil) || [temp isEqualToString:@"1"]) { - [nameCheckbox setState:NSOnState]; - } else { - [nameCheckbox setState:NSOffState]; - } - } - + [albumCheckbox setState:[defaults boolForKey:@"showAlbum"] ? NSOnState : NSOffState]; + [nameCheckbox setState:[defaults boolForKey:@"showName"] ? NSOnState : NSOffState]; [artistCheckbox setState:[defaults boolForKey:@"showArtist"] ? NSOnState : NSOffState]; [trackTimeCheckbox setState:[defaults boolForKey:@"showTime"] ? NSOnState : NSOffState]; @@ -131,11 +106,7 @@ for (i = 0; i < [loginarray count]; i++) { NSDictionary *tempDict = [loginarray objectAtIndex:i]; - - //Here we are seeing if our program is already in loginwindow.plist. - //See the problem below for this problem here. We will do the same thing. - - if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:@"VocabularyBuilder.app"]) { + if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[[[NSBundle mainBundle] bundlePath] lastPathComponent]]) { [launchAtLoginCheckbox setState:NSOnState]; } } @@ -163,7 +134,6 @@ - (IBAction)apply:(id)sender { - ProcessSerialNumber psn; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:myItems forKey:@"menu"]; @@ -184,6 +154,7 @@ if ([launchAtLoginCheckbox state] == NSOnState) { NSMutableDictionary *loginwindow; NSMutableArray *loginarray; + ComponentInstance temp = OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype);; int i; BOOL skip = NO; @@ -193,20 +164,23 @@ for (i = 0; i < [loginarray count]; i++) { NSDictionary *tempDict = [loginarray objectAtIndex:i]; - - //Here we are seeing if our program is already in loginwindow.plist. - //See the problem below for this problem here. We will do the same thing. - - if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:@"VocabularyBuilder.app"]) { + if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[[[NSBundle mainBundle] bundlePath] lastPathComponent]]) { skip = YES; } } if (!skip) { - [loginarray addObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], @"Hide", [[NSBundle mainBundle] bundlePath], @"Path", nil]]; + 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]]; - [defaults setPersistentDomain:loginwindow forName:@"loginwindow"]; - [defaults synchronize]; + AECreateDesc(typeChar, [script cString], [script cStringLength], + &scriptDesc); + + OSADoScript(temp, &scriptDesc, kOSANullScript, typeChar, kOSAModeCanInteract, &resultDesc); + + AEDisposeDesc(&scriptDesc); + AEDisposeDesc(&resultDesc); + CloseComponent(temp); } } else { NSMutableDictionary *loginwindow; @@ -219,8 +193,7 @@ for (i = 0; i < [loginarray count]; i++) { NSDictionary *tempDict = [loginarray objectAtIndex:i]; - - if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:@"VocabularyBuilder.app"]) { + if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[[[NSBundle mainBundle] bundlePath] lastPathComponent]]) { [loginarray removeObjectAtIndex:i]; [defaults setPersistentDomain:loginwindow forName:@"loginwindow"]; [defaults synchronize]; @@ -236,9 +209,16 @@ [defaults setInteger:5 forKey:@"SongsInAdvance"]; } - psn = [mt iTunesPSN]; - if (!((psn.highLongOfPSN == kNoProcess) && (psn.lowLongOfPSN == 0))) { - [mt rebuildMenu]; + { + NSArray *apps = [[NSWorkspace sharedWorkspace] launchedApplications]; + int i; + + for (i = 0; i < [apps count]; i++) { + if ([[[apps objectAtIndex:i] objectForKey:@"NSApplicationName"] + isEqualToString:@"iTunes"]) { + [mt rebuildMenu]; + } + } } [mt clearHotKeys]; } @@ -263,15 +243,7 @@ - (IBAction)okHotKey:(id)sender { - NSString *string; - if (([combo modifiers] <= 0) && ([combo keyCode] >= 0)) { - [window setLevel:NSNormalWindowLevel]; - NSRunAlertPanel(@"Bad Key Combo", @"Please enter a valid key combo. A valid combo must have a modifier key in it. (Command, option, shift, control).", @"OK", nil, nil, nil); - [window setLevel:NSStatusWindowLevel]; - return; - } - - string = [combo userDisplayRep]; + NSString *string = [combo userDisplayRep]; if (string == nil) { string = @"None";