+ return [presets autorelease];
+}
+
+- (BOOL)switchToEqualizerPreset:(int)index
+{
+ [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pEQP'), from:'null'() }, data:obj { form:'indx', want:type('cEQP'), seld:long(%lu), from:'null'() }",(index+1)] eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+ return YES;
+}
+
+- (BOOL)supportsExternalWindow
+{
+ return YES;
+}
+
+- (NSString *)externalWindowName
+{
+ return @"iTunes";
+}
+
+- (BOOL)showExternalWindow
+{
+ //Do this Alex
+ return YES;
+}
+
+- (ProcessSerialNumber)iTunesPSN
+{
+ ProcessSerialNumber number;
+ number.highLongOfPSN = kNoProcess;
+ number.lowLongOfPSN = 0;
+
+ while ( (GetNextProcess(&number) == noErr) )
+ {
+ CFStringRef name;
+ if ( (CopyProcessName(&number, &name) == noErr) )
+ {
+ if ([(NSString *)name isEqualToString:@"iTunes"])
+ {
+ return number;
+ }
+ [(NSString *)name release];
+ }
+ }
+ return number;
+}
+
+//Below is old
+/*
++ (id)remote
+{
+ return [[[iTunesRemote alloc] init] autorelease];
+}
+
+- (NSString *)remoteTitle
+{
+ return @"iTunes Remote";
+}
+
+- (NSString *)remoteInformation
+{
+ return @"Default MenuTunes plugin to control iTunes, by iThink Software.";
+}
+
+- (NSImage *)remoteIcon
+{
+ return nil;
+}
+
+- (BOOL)begin
+{
+ savedPSN = [self iTunesPSN];
+ return YES;
+}
+
+- (BOOL)halt
+{
+ return YES;
+}
+
+- (NSString *)playerFullName
+{
+ return @"iTunes";
+}
+
+- (NSString *)playerSimpleName
+{
+ return @"iTunes";
+}
+
+- (NSDictionary *)capabilities
+{
+ return [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithBool: YES], @"Remote",
+ [NSNumber numberWithBool: YES], @"Basic Track Control",
+ [NSNumber numberWithBool: YES], @"Track Information",
+ [NSNumber numberWithBool: YES], @"Track Navigation",
+ [NSNumber numberWithBool: YES], @"Upcoming Songs",
+ [NSNumber numberWithBool: YES], @"Playlists",
+ [NSNumber numberWithBool: YES], @"Volume",
+ [NSNumber numberWithBool: YES], @"Shuffle",
+ [NSNumber numberWithBool: YES], @"Repeat Modes",
+ [NSNumber numberWithBool: YES], @"Equalizer",
+ [NSNumber numberWithBool: YES], @"Track Rating",
+ nil];
+}
+
+- (BOOL)showPrimaryInterface
+{
+ // Make this into AppleEvents... shouldn't be too hard, I'm just too tired to do it right now.
+ [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pisf'), from:'null'() }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+ // Still have to convert these to AEs:
+ // set visible of browser window 1 to true
+ [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), ----:obj { form:'prop', want:'prop', seld:'pvis', from:obj { form:'indx', want:'cBrW', seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+ // set minimized of browser window 1 to false
+ [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(0), ----:obj { form:'prop', want:'prop', seld:'pMin', from:obj { form:'indx', want:'cBrW', seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+