From ef4f5a3e753596396e93ba33b7e2ab5e8b53c5d8 Mon Sep 17 00:00:00 2001 From: Matthew Judy Date: Wed, 9 Apr 2003 21:50:32 +0000 Subject: [PATCH] Changes for prefs stuff and random tweaks too --- English.lproj/Preferences.nib/info.nib | 8 +- .../Preferences.nib/keyedobjects.nib | Bin 30778 -> 30833 bytes OldMainController.h | 1 - OldMainController.m | 8 +- PreferencesController.h | 49 +- PreferencesController.m | 440 +++++++++++------- StatusWindow.m | 2 +- iTunesRemote.m | 6 +- 8 files changed, 317 insertions(+), 197 deletions(-) diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib index 3d6dc3c..7043aee 100755 --- a/English.lproj/Preferences.nib/info.nib +++ b/English.lproj/Preferences.nib/info.nib @@ -3,9 +3,9 @@ IBDocumentLocation - 390 31 356 240 0 0 1152 746 + 343 32 356 240 0 0 1056 770 IBFramework Version - 291.0 + 286.0 IBGroupedObjects 0 @@ -20,10 +20,6 @@ 281 - IBOpenObjects - - 6 - IBSystem Version 6I32 diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib index 4e23c97051a6febe0e4b768af95a6fc06d50cf43..109f0fe7a6238849cac670811a50963c82c21252 100755 GIT binary patch literal 30833 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%0DVkDH+k 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 DIX1^S literal 30778 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", nil]; - - //Get our preferred menu - myItems = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"menu"] mutableCopy]; - - //Delete items in the availableItems array that are already part of the menu - for (i = 0; i < [myItems count]; i++) { - NSString *item = [myItems objectAtIndex:i]; - if (![item isEqualToString:@""]) - { - [availableItems removeObject:item]; - } - } - - //Items that show should a submenu image - submenuItems = [[NSArray alloc] initWithObjects:@"Upcoming Songs", @"Playlists", @"EQ Presets", @"Song Rating", nil]; - - //Fill in the number of songs in advance to show field - [songsInAdvance setIntValue:[defaults integerForKey:@"SongsInAdvance"]]; - - //Fill in hot key buttons - if ([defaults objectForKey:@"PlayPause"]){ - playPauseCombo = [defaults keyComboForKey:@"PlayPause"]; - [playPauseButton setTitle:[playPauseCombo userDisplayRep]]; - } else { - playPauseCombo = [[KeyCombo alloc] init]; - } - - if ([defaults objectForKey:@"NextTrack"]) { - nextTrackCombo = [defaults keyComboForKey:@"NextTrack"]; - [nextTrackButton setTitle:[nextTrackCombo userDisplayRep]]; - } else { - nextTrackCombo = [[KeyCombo alloc] init]; - } - - if ([defaults objectForKey:@"PrevTrack"]) { - prevTrackCombo = [defaults keyComboForKey:@"PrevTrack"]; - [previousTrackButton setTitle:[prevTrackCombo userDisplayRep]]; - } else { - prevTrackCombo = [[KeyCombo alloc] init]; - } - - if ([defaults objectForKey:@"TrackInfo"]) { - trackInfoCombo = [defaults keyComboForKey:@"TrackInfo"]; - [trackInfoButton setTitle:[trackInfoCombo userDisplayRep]]; - } else { - trackInfoCombo = [[KeyCombo alloc] init]; - } - - if ([defaults objectForKey:@"UpcomingSongs"]) { - upcomingSongsCombo = [defaults keyComboForKey:@"UpcomingSongs"]; - [upcomingSongsButton setTitle:[upcomingSongsCombo userDisplayRep]]; - } else { - upcomingSongsCombo = [[KeyCombo alloc] init]; - } - - //Check current track info buttons - [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]; - - //Set the launch at login checkbox state - { - NSMutableDictionary *loginwindow; - NSMutableArray *loginarray; - int i; - - [defaults synchronize]; - loginwindow = [[defaults persistentDomainForName:@"loginwindow"] mutableCopy]; - loginarray = [loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"]; - - for (i = 0; i < [loginarray count]; i++) { - NSDictionary *tempDict = [loginarray objectAtIndex:i]; - if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[[[NSBundle mainBundle] bundlePath] lastPathComponent]]) { - [launchAtLoginCheckbox setState:NSOnState]; - } - } - } - - //Show our window - [window setLevel:NSStatusWindowLevel]; - [window center]; - [window makeKeyAndOrderFront:nil]; - [window setDelegate:self]; + df = [[NSUserDefaults standardUserDefaults] retain]; + controller = nil; } return self; } -- (void)dealloc + +/*************************************************************************/ +#pragma mark - +#pragma mark ACCESSOR METHODS +/*************************************************************************/ + +- (id)controller { - [self setKeyCombo:nil]; - [playPauseCombo release]; - [nextTrackCombo release]; - [prevTrackCombo release]; - [trackInfoCombo release]; - [upcomingSongsCombo release]; - [keyComboPanel release]; - [menuTableView setDataSource:nil]; - [allTableView setDataSource:nil]; - [mt release]; - [availableItems release]; - [submenuItems release]; - [myItems release]; + return controller; +} + +- (void)setController:(id)object +{ +NSLog(@"foo"); + [controller autorelease]; + controller = [object retain]; +NSLog(@"bar"); +} + + +/*************************************************************************/ +#pragma mark - +#pragma mark INSTANCE METHODS +/*************************************************************************/ + + +- (IBAction)showPrefsWindow:(id)sender +{ + if (! window) { // If window does not exist yet, then the nib hasn't been loaded. + [self setupWindow]; // Load in the nib, and perform any initial setup. + [self setupCustomizationTables]; // Setup the DnD manu config tables. + [self setupMenuItems]; // Setup the arrays of menu items + [self setupUI]; // Sets up additional UI + [window setDelegate:self]; + } + + [window setLevel:NSStatusWindowLevel]; + [window center]; + [window makeKeyAndOrderFront:self]; + [NSApp activateIgnoringOtherApps:YES]; } - (IBAction)apply:(id)sender { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:myItems forKey:@"menu"]; + [df setObject:myItems forKey:@"menu"]; //Set key combos - [defaults setKeyCombo:playPauseCombo forKey:@"PlayPause"]; - [defaults setKeyCombo:nextTrackCombo forKey:@"NextTrack"]; - [defaults setKeyCombo:prevTrackCombo forKey:@"PrevTrack"]; - [defaults setKeyCombo:trackInfoCombo forKey:@"TrackInfo"]; - [defaults setKeyCombo:upcomingSongsCombo forKey:@"UpcomingSongs"]; + [df setKeyCombo:playPauseCombo forKey:@"PlayPause"]; + [df setKeyCombo:nextTrackCombo forKey:@"NextTrack"]; + [df setKeyCombo:prevTrackCombo forKey:@"PrevTrack"]; + [df setKeyCombo:trackInfoCombo forKey:@"TrackInfo"]; + [df setKeyCombo:upcomingSongsCombo forKey:@"UpcomingSongs"]; //Set info checkboxes - [defaults setBool:[albumCheckbox state] forKey:@"showAlbum"]; - [defaults setBool:[nameCheckbox state] forKey:@"showName"]; - [defaults setBool:[artistCheckbox state] forKey:@"showArtist"]; - [defaults setBool:[trackTimeCheckbox state] forKey:@"showTime"]; + [df setBool:[albumCheckbox state] forKey:@"showAlbum"]; + [df setBool:[nameCheckbox state] forKey:@"showName"]; + [df setBool:[artistCheckbox state] forKey:@"showArtist"]; + [df setBool:[trackTimeCheckbox state] forKey:@"showTime"]; //Here we set whether we will launch at login by modifying loginwindow.plist if ([launchAtLoginCheckbox state] == NSOnState) { @@ -158,8 +115,8 @@ int i; BOOL skip = NO; - [defaults synchronize]; - loginwindow = [[defaults persistentDomainForName:@"loginwindow"] mutableCopy]; + [df synchronize]; + loginwindow = [[df persistentDomainForName:@"loginwindow"] mutableCopy]; loginarray = [loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"]; for (i = 0; i < [loginarray count]; i++) { @@ -187,16 +144,16 @@ NSMutableArray *loginarray; int i; - [[NSUserDefaults standardUserDefaults] synchronize]; - loginwindow = [[[NSUserDefaults standardUserDefaults] persistentDomainForName:@"loginwindow"] mutableCopy]; + [df synchronize]; + loginwindow = [[df persistentDomainForName:@"loginwindow"] mutableCopy]; loginarray = [loginwindow objectForKey:@"AutoLaunchedApplicationDictionary"]; for (i = 0; i < [loginarray count]; i++) { NSDictionary *tempDict = [loginarray objectAtIndex:i]; if ([[[tempDict objectForKey:@"Path"] lastPathComponent] isEqualToString:[[[NSBundle mainBundle] bundlePath] lastPathComponent]]) { [loginarray removeObjectAtIndex:i]; - [defaults setPersistentDomain:loginwindow forName:@"loginwindow"]; - [defaults synchronize]; + [df setPersistentDomain:loginwindow forName:@"loginwindow"]; + [df synchronize]; break; } } @@ -204,9 +161,9 @@ //Set songs in advance if ([songsInAdvance intValue]) { - [defaults setInteger:[songsInAdvance intValue] forKey:@"SongsInAdvance"]; + [df setInteger:[songsInAdvance intValue] forKey:@"SongsInAdvance"]; } else { - [defaults setInteger:5 forKey:@"SongsInAdvance"]; + [df setInteger:5 forKey:@"SongsInAdvance"]; } /*{ @@ -216,17 +173,17 @@ for (i = 0; i < [apps count]; i++) { if ([[[apps objectAtIndex:i] objectForKey:@"NSApplicationName"] isEqualToString:@"iTunes"]) { - [mt rebuildMenu]; + [controller rebuildMenu]; } } }*/ - [mt clearHotKeys]; + [controller clearHotKeys]; } - (IBAction)cancel:(id)sender { [window close]; - [mt closePreferences]; + [controller closePreferences]; } - (IBAction)cancelHotKey:(id)sender @@ -260,9 +217,7 @@ } playPauseCombo = [combo copy]; [playPauseButton setTitle:string]; - } - else if ([setHotKey isEqualToString:@"NextTrack"]) - { + } else if ([setHotKey isEqualToString:@"NextTrack"]) { if (([combo isEqual:playPauseCombo] || [combo isEqual:prevTrackCombo] || [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { @@ -274,9 +229,7 @@ } nextTrackCombo = [combo copy]; [nextTrackButton setTitle:string]; - } - else if ([setHotKey isEqualToString:@"PrevTrack"]) - { + } else if ([setHotKey isEqualToString:@"PrevTrack"]) { if (([combo isEqual:nextTrackCombo] || [combo isEqual:playPauseCombo] || [combo isEqual:trackInfoCombo] || [combo isEqual:upcomingSongsCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { @@ -288,9 +241,7 @@ } prevTrackCombo = [combo copy]; [previousTrackButton setTitle:string]; - } - else if ([setHotKey isEqualToString:@"TrackInfo"]) - { + } else if ([setHotKey isEqualToString:@"TrackInfo"]) { if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || [combo isEqual:playPauseCombo] || [combo isEqual:upcomingSongsCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { @@ -302,9 +253,7 @@ } trackInfoCombo = [combo copy]; [trackInfoButton setTitle:string]; - } - else if ([setHotKey isEqualToString:@"UpcomingSongs"]) - { + } else if ([setHotKey isEqualToString:@"UpcomingSongs"]) { if (([combo isEqual:nextTrackCombo] || [combo isEqual:prevTrackCombo] || [combo isEqual:trackInfoCombo] || [combo isEqual:playPauseCombo]) && !(([combo modifiers] == -1) && ([combo keyCode] == -1))) { @@ -324,7 +273,7 @@ { [self apply:nil]; [window close]; - [mt closePreferences]; + [controller closePreferences]; } - (IBAction)setCurrentTrackInfo:(id)sender @@ -391,19 +340,161 @@ [keyComboField setStringValue:string]; } -// -// + +/*************************************************************************/ +#pragma mark - +#pragma mark PRIVATE METHOD IMPLEMENTATIONS +/*************************************************************************/ + +- (void)setupWindow +{ + if ( ! [NSBundle loadNibNamed:@"Preferences" owner:self] ) { + NSLog( @"Failed to load Preferences.nib" ); + NSBeep(); + return; + } +} + +- (void)setupCustomizationTables +{ + NSImageCell *imgCell = [[[NSImageCell alloc] initImageCell:nil] autorelease]; + + // Set the table view cells up + [imgCell setImageScaling:NSScaleNone]; + [[menuTableView tableColumnWithIdentifier:@"submenu"] setDataCell:imgCell]; + [[allTableView tableColumnWithIdentifier:@"submenu"] setDataCell:imgCell]; + + // Register for drag and drop + [menuTableView registerForDraggedTypes:[NSArray arrayWithObjects: + @"MenuTableViewPboardType", + @"AllTableViewPboardType", + nil]]; + [allTableView registerForDraggedTypes:[NSArray arrayWithObjects: + @"MenuTableViewPboardType", + @"AllTableViewPboardType", + nil]]; +} + +- (void)setupMenuItems +{ + NSEnumerator *itemEnum; + 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", + @"", + nil]; + + // Get our preferred menu + myItems = [[df arrayForKey:@"menu"] mutableCopy]; + + // Delete items in the availableItems array that are already part of the menu + itemEnum = [myItems objectEnumerator]; + while ( (anItem = [itemEnum nextObject]) ) { + if ( ! [anItem isEqualToString:@""] ) { + [availableItems removeObject:anItem]; + } + } + + // Items that show should a submenu image + submenuItems = [[NSArray alloc] initWithObjects: + @"Upcoming Songs", + @"Playlists", + @"EQ Presets", + @"Song Rating", + nil]; +} + +- (void)setupUI +{ + NSMutableDictionary *loginwindow; + NSMutableArray *loginarray; + NSEnumerator *loginEnum; + id anItem; + + // Fill in the number of songs in advance to show field + [songsInAdvance setIntValue:[df integerForKey:@"SongsInAdvance"]]; + + // Fill in hot key buttons + if ([df objectForKey:@"PlayPause"]){ + playPauseCombo = [df keyComboForKey:@"PlayPause"]; + [playPauseButton setTitle:[playPauseCombo userDisplayRep]]; + } 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]]; + } else { + upcomingSongsCombo = [[KeyCombo alloc] init]; + } + + // Check current track info buttons + [albumCheckbox setState:[df boolForKey:@"showAlbum"] ? NSOnState : NSOffState]; + [nameCheckbox setState:[df boolForKey:@"showName"] ? NSOnState : NSOffState]; + [artistCheckbox setState:[df boolForKey:@"showArtist"] ? NSOnState : NSOffState]; + [trackTimeCheckbox setState:[df boolForKey:@"showTime"] ? NSOnState : NSOffState]; + + // Set the launch at login checkbox state + [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]]) { + [launchAtLoginCheckbox setState:NSOnState]; + } + } +} + + +/*************************************************************************/ +#pragma mark - +#pragma mark NSWindow DELEGATE METHODS +/*************************************************************************/ - (void)windowWillClose:(NSNotification *)note { - [mt closePreferences]; + [(MainController *)controller closePreferences]; } -// -// -// Table View Datasource Methods -// -// + +/*************************************************************************/ +#pragma mark - +#pragma mark NSTableView DATASOURCE METHODS +/*************************************************************************/ - (int)numberOfRowsInTableView:(NSTableView *)aTableView { @@ -523,4 +614,29 @@ return NSDragOperationGeneric; } + +/*************************************************************************/ +#pragma mark - +#pragma mark DEALLOCATION METHODS +/*************************************************************************/ + +- (void)dealloc +{ + [self setKeyCombo:nil]; + [playPauseCombo release]; + [nextTrackCombo release]; + [prevTrackCombo release]; + [trackInfoCombo release]; + [upcomingSongsCombo release]; + [keyComboPanel release]; + [menuTableView setDataSource:nil]; + [allTableView setDataSource:nil]; + [controller release]; + [availableItems release]; + [submenuItems release]; + [myItems release]; + [df release]; +} + + @end diff --git a/StatusWindow.m b/StatusWindow.m index ca12378..a2a223a 100755 --- a/StatusWindow.m +++ b/StatusWindow.m @@ -53,7 +53,7 @@ imageHeight = [image size].height; // Iterate over each line to get text width and height - while ( oneLine = [lineEnum nextObject] ) { + while ( (oneLine = [lineEnum nextObject]) ) { // Get the width of one line, adding 8.0 because Apple sucks donkey rectum. float oneLineWidth = ( [oneLine sizeWithAttributes:attr].width + 8.0 ); // Add the height of this line to the total text height diff --git a/iTunesRemote.m b/iTunesRemote.m index f796d95..0723d73 100755 --- a/iTunesRemote.m +++ b/iTunesRemote.m @@ -286,8 +286,8 @@ - (ITMTRemotePlayerRepeatMode)repeatMode { - FourCharCode m00f; - int result; + FourCharCode m00f = 0; + int result = 0; m00f = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pRpt" fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN]; @@ -309,7 +309,7 @@ - (BOOL)setRepeatMode:(ITMTRemotePlayerRepeatMode)repeatMode { - FourCharCode m00f; + FourCharCode m00f = 0; switch (repeatMode) { case ITMTRemotePlayerRepeatOff: -- 2.20.1