From c28e8d058d5c9886ae426463ab038ded8f1759b6 Mon Sep 17 00:00:00 2001 From: vspader Date: Sat, 26 May 2007 14:43:31 +0000 Subject: [PATCH] Fixed up menu items. Added OpenURL panel. --- Application/AppController.h | 11 +- Application/AppController.m | 86 ++---- Cog.xcodeproj/project.pbxproj | 44 +-- English.lproj/MainMenu.nib/classes.nib | 6 +- English.lproj/MainMenu.nib/info.nib | 3 +- English.lproj/MainMenu.nib/keyedobjects.nib | Bin 60940 -> 58741 bytes English.lproj/OpenURLPanel.nib/classes.nib | 107 ++++++++ English.lproj/OpenURLPanel.nib/info.nib | 16 ++ .../OpenURLPanel.nib/keyedobjects.nib | Bin 0 -> 5732 bytes Playlist/PlaylistLoader.h | 3 - Playlist/PlaylistLoader.m | 33 --- ThirdParty/OpenURLPanel/OpenURLPanel.h | 94 +++++++ ThirdParty/OpenURLPanel/OpenURLPanel.m | 250 ++++++++++++++++++ 13 files changed, 525 insertions(+), 128 deletions(-) create mode 100644 English.lproj/OpenURLPanel.nib/classes.nib create mode 100644 English.lproj/OpenURLPanel.nib/info.nib create mode 100644 English.lproj/OpenURLPanel.nib/keyedobjects.nib create mode 100755 ThirdParty/OpenURLPanel/OpenURLPanel.h create mode 100755 ThirdParty/OpenURLPanel/OpenURLPanel.m diff --git a/Application/AppController.h b/Application/AppController.h index dd510828b..447089574 100644 --- a/Application/AppController.h +++ b/Application/AppController.h @@ -22,9 +22,6 @@ IBOutlet NSPanel *mainWindow; - IBOutlet NSPanel *addURLPanel; - IBOutlet NSComboBox *urlComboBox; - IBOutlet NSButton *playButton; IBOutlet NSButton *prevButton; IBOutlet NSButton *nextButton; @@ -58,17 +55,11 @@ BOOL remoteButtonHeld; /* true as long as the user holds the left,right,plus or minus on the remote control */ } -- (IBAction)addURL:(id)sender; -- (IBAction)addURLSheetOK:(id)sender; -- (IBAction)addURLSheetCancel:(id)sender; +- (IBAction)openURL:(id)sender; - (IBAction)openFiles:(id)sender; - (IBAction)delEntries:(id)sender; - (IBAction)savePlaylist:(id)sender; -- (IBAction)savePlaylistAs:(id)sender; -- (IBAction)loadPlaylist:(id)sender; - -- (void)openPanelDidEnd:(NSOpenPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo; - (IBAction)donate:(id)sender; diff --git a/Application/AppController.m b/Application/AppController.m index aee89e598..956b8550b 100644 --- a/Application/AppController.m +++ b/Application/AppController.m @@ -8,6 +8,7 @@ #import "NDHotKeyEvent.h" #import "AppleRemote.h" #import "PlaylistLoader.h" +#import "OpenURLPanel.h" @implementation AppController @@ -133,13 +134,6 @@ increase/decrease as long as the user holds the left/right, plus/minus button */ [p setAllowsMultipleSelection:YES]; [p beginSheetForDirectory:nil file:nil types:[playlistLoader acceptableFileTypes] modalForWindow:mainWindow modalDelegate:self didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:NULL]; -// [p beginForDirectory:nil file:nil types:[playlistController acceptableFileTypes] modelessDelegate:self didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:nil]; - -/* if ([p runModalForTypes:[playlistController acceptableFileTypes]] == NSOKButton) - { - [playlistController addPaths:[p filenames] sort:YES]; - } -*/ } - (void)openPanelDidEnd:(NSOpenPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo @@ -148,32 +142,42 @@ increase/decrease as long as the user holds the left/right, plus/minus button */ { [playlistLoader addURLs:[panel URLs] sort:YES]; } - -// [panel release]; } -- (IBAction)addURL:(id)sender +- (IBAction)savePlaylist:(id)sender { - [NSApp beginSheet:addURLPanel modalForWindow:mainWindow modalDelegate:self didEndSelector:nil contextInfo:nil]; -} - -- (IBAction)addURLSheetOK:(id)sender -{ - NSURL *url = [NSURL URLWithString:[urlComboBox stringValue]]; + NSSavePanel *p; - [playlistLoader addURLs:[NSArray arrayWithObject:url] sort:NO]; + p = [NSSavePanel savePanel]; - [NSApp endSheet:addURLPanel]; - [addURLPanel orderOut:self]; + [p setAllowedFileTypes:[playlistLoader acceptablePlaylistTypes]]; + [p beginSheetForDirectory:nil file:nil modalForWindow:mainWindow modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:NULL]; } -- (IBAction)addURLSheetCancel:(id)sender +- (void)savePanelDidEnd:(NSSavePanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo { - NSLog(@"GONE!"); - [NSApp endSheet:addURLPanel]; - [addURLPanel orderOut:self]; + if (returnCode == NSOKButton) + { + [playlistLoader save:[panel filename]]; + } } +- (IBAction)openURL:(id)sender +{ + OpenURLPanel *p; + + p = [OpenURLPanel openURLPanel]; + + [p beginSheetWithWindow:mainWindow delegate:self didEndSelector:@selector(openURLPanelDidEnd:returnCode:contextInfo:) contextInfo:nil]; +} + +- (void)openURLPanelDidEnd:(OpenURLPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo +{ + if (returnCode == NSOKButton) + { + [playlistLoader addURLs:[NSArray arrayWithObject:[panel url]] sort:NO]; + } +} - (IBAction)delEntries:(id)sender { @@ -187,7 +191,6 @@ increase/decrease as long as the user holds the left/right, plus/minus button */ - (BOOL)application:(NSApplication *)sender delegateHandlesKey:(NSString *)key { - // DBLog(@"W00t"); return [key isEqualToString:@"currentEntry"]; } @@ -263,41 +266,6 @@ increase/decrease as long as the user holds the left/right, plus/minus button */ } -- (IBAction)savePlaylist:(id)sender -{ - [playlistLoader save]; -} -- (IBAction)savePlaylistAs:(id)sender -{ - NSSavePanel *p; - - p = [NSSavePanel savePanel]; - - [p setAllowedFileTypes:[playlistLoader acceptablePlaylistTypes]]; - - if ([p runModalForDirectory:nil file:[[playlistLoader currentFile] lastPathComponent]] == NSOKButton) - { - [playlistLoader save:[p filename]]; - } -} - -- (IBAction)loadPlaylist:(id)sender -{ - NSOpenPanel *p; - - p = [NSOpenPanel openPanel]; - - [p setCanChooseDirectories:NO]; - [p setAllowsMultipleSelection:NO]; - - if ([p runModalForTypes:[playlistLoader acceptablePlaylistTypes]] == NSOKButton) - { - [playlistLoader load:[p filename]]; - } - - [mainWindow makeKeyAndOrderFront:self]; -} - - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag { // if (flag == NO) diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index b29779656..3c29717f9 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -62,6 +62,9 @@ 177FD1090B90CB5F0011C3B5 /* MAD.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD01B0B90CAC60011C3B5 /* MAD.bundle */; }; 177FD10A0B90CB5F0011C3B5 /* Flac.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD0170B90CABF0011C3B5 /* Flac.bundle */; }; 177FD10B0B90CB5F0011C3B5 /* CoreAudio.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 177FD0130B90CAB50011C3B5 /* CoreAudio.bundle */; }; + 179790E00C087AB7001D6996 /* OpenURLPanel.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 179790DE0C087AB7001D6996 /* OpenURLPanel.h */; }; + 179790E10C087AB7001D6996 /* OpenURLPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = 179790DF0C087AB7001D6996 /* OpenURLPanel.m */; }; + 179790F20C087B46001D6996 /* OpenURLPanel.nib in Resources */ = {isa = PBXBuildFile; fileRef = 179790F00C087B46001D6996 /* OpenURLPanel.nib */; }; 17ADB4580B979C7C00257CA2 /* FileSource.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17ADB4450B979C5700257CA2 /* FileSource.bundle */; }; 17ADB6650B97A97100257CA2 /* HTTPSource.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17ADB65C0B97A96400257CA2 /* HTTPSource.bundle */; }; 17BB5CED0B8A86010009ACB1 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */; }; @@ -91,13 +94,9 @@ 8E75757409F31D5A0080F1EE /* PlaylistView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753209F31D5A0080F1EE /* PlaylistView.m */; }; 8E75757509F31D5A0080F1EE /* Shuffle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E75753409F31D5A0080F1EE /* Shuffle.m */; }; 8E7575BE09F31D800080F1EE /* wheel.icns in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575A609F31D800080F1EE /* wheel.icns */; }; - 8E7575CB09F31DCA0080F1EE /* Changelog in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C309F31DCA0080F1EE /* Changelog */; }; 8E7575CC09F31DCA0080F1EE /* Cog.scriptSuite in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C409F31DCA0080F1EE /* Cog.scriptSuite */; }; 8E7575CD09F31DCA0080F1EE /* Cog.scriptTerminology in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C509F31DCA0080F1EE /* Cog.scriptTerminology */; }; - 8E7575CE09F31DCA0080F1EE /* COMPILE in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C609F31DCA0080F1EE /* COMPILE */; }; - 8E7575CF09F31DCA0080F1EE /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C709F31DCA0080F1EE /* COPYING */; }; 8E7575D009F31DCA0080F1EE /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C809F31DCA0080F1EE /* Credits.html */; }; - 8E7575D109F31DCA0080F1EE /* README in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575C909F31DCA0080F1EE /* README */; }; 8E7575DB09F31E930080F1EE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8E7575D909F31E930080F1EE /* Localizable.strings */; }; 8E9A2E860BA78B500091081B /* SecondsFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9A2E840BA78B500091081B /* SecondsFormatter.m */; }; 8E9A2EDA0BA78D9D0091081B /* IndexFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9A2ED80BA78D9D0091081B /* IndexFormatter.m */; }; @@ -142,6 +141,7 @@ 17E94E560C03B09A00D92B9B /* CogAudio.framework in CopyFiles */, 170680840B950164006BA573 /* Growl.framework in CopyFiles */, 17F94CCD0B8D090800A34E87 /* Sparkle.framework in CopyFiles */, + 179790E00C087AB7001D6996 /* OpenURLPanel.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -228,6 +228,9 @@ 177FD0270B90CADE0011C3B5 /* Shorten.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Shorten.bundle; path = Plugins/Shorten/build/Release/Shorten.bundle; sourceTree = ""; }; 177FD02B0B90CAE50011C3B5 /* TagLib.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = TagLib.bundle; path = Plugins/TagLib/build/Release/TagLib.bundle; sourceTree = ""; }; 177FD02F0B90CAEC0011C3B5 /* Vorbis.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Vorbis.bundle; path = Plugins/Vorbis/build/Release/Vorbis.bundle; sourceTree = ""; }; + 179790DE0C087AB7001D6996 /* OpenURLPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OpenURLPanel.h; sourceTree = ""; }; + 179790DF0C087AB7001D6996 /* OpenURLPanel.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OpenURLPanel.m; sourceTree = ""; }; + 179790F10C087B46001D6996 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/OpenURLPanel.nib; sourceTree = ""; }; 17ADB4450B979C5700257CA2 /* FileSource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = FileSource.bundle; path = Plugins/FileSource/build/Release/FileSource.bundle; sourceTree = ""; }; 17ADB65C0B97A96400257CA2 /* HTTPSource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = HTTPSource.bundle; path = Plugins/HTTPSource/build/Release/HTTPSource.bundle; sourceTree = ""; }; 17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; @@ -268,13 +271,9 @@ 8E75753309F31D5A0080F1EE /* Shuffle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Shuffle.h; sourceTree = ""; }; 8E75753409F31D5A0080F1EE /* Shuffle.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Shuffle.m; sourceTree = ""; }; 8E7575A609F31D800080F1EE /* wheel.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = wheel.icns; sourceTree = ""; }; - 8E7575C309F31DCA0080F1EE /* Changelog */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Changelog; sourceTree = ""; }; 8E7575C409F31DCA0080F1EE /* Cog.scriptSuite */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Cog.scriptSuite; sourceTree = ""; }; 8E7575C509F31DCA0080F1EE /* Cog.scriptTerminology */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Cog.scriptTerminology; sourceTree = ""; }; - 8E7575C609F31DCA0080F1EE /* COMPILE */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = COMPILE; sourceTree = ""; }; - 8E7575C709F31DCA0080F1EE /* COPYING */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; 8E7575C809F31DCA0080F1EE /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.html; path = Credits.html; sourceTree = ""; }; - 8E7575C909F31DCA0080F1EE /* README */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = README; sourceTree = ""; }; 8E7575DA09F31E930080F1EE /* English */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; 8E7575DC09F31EAF0080F1EE /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = French.lproj/Localizable.strings; sourceTree = ""; }; 8E9A2E830BA78B500091081B /* SecondsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SecondsFormatter.h; sourceTree = ""; }; @@ -392,6 +391,7 @@ 177EBF7D0B8BC2A70000BC8C /* AppleRemote */, 177EBF850B8BC2A70000BC8C /* ImageTextCell */, 177EBF880B8BC2A70000BC8C /* KFTypeSelectTableView */, + 179790DD0C087AB7001D6996 /* OpenURLPanel */, 177EBF8B0B8BC2A70000BC8C /* NDHotKeys */, 177EBF900B8BC2A70000BC8C /* UKKQueue */, ); @@ -511,6 +511,15 @@ name = Images; sourceTree = ""; }; + 179790DD0C087AB7001D6996 /* OpenURLPanel */ = { + isa = PBXGroup; + children = ( + 179790DE0C087AB7001D6996 /* OpenURLPanel.h */, + 179790DF0C087AB7001D6996 /* OpenURLPanel.m */, + ); + path = OpenURLPanel; + sourceTree = ""; + }; 17B619FF0B909ED400BC003F /* PlugIns */ = { isa = PBXGroup; children = ( @@ -569,14 +578,11 @@ 8D1107310486CEB800E47090 /* Info.plist */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 8E7575D909F31E930080F1EE /* Localizable.strings */, + 179790F00C087B46001D6996 /* OpenURLPanel.nib */, 29B97318FDCFA39411CA2CEA /* MainMenu.nib */, - 8E7575C309F31DCA0080F1EE /* Changelog */, 8E7575C409F31DCA0080F1EE /* Cog.scriptSuite */, 8E7575C509F31DCA0080F1EE /* Cog.scriptTerminology */, - 8E7575C609F31DCA0080F1EE /* COMPILE */, - 8E7575C709F31DCA0080F1EE /* COPYING */, 8E7575C809F31DCA0080F1EE /* Credits.html */, - 8E7575C909F31DCA0080F1EE /* README */, ); name = Resources; sourceTree = ""; @@ -726,13 +732,9 @@ 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */, 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 8E7575BE09F31D800080F1EE /* wheel.icns in Resources */, - 8E7575CB09F31DCA0080F1EE /* Changelog in Resources */, 8E7575CC09F31DCA0080F1EE /* Cog.scriptSuite in Resources */, 8E7575CD09F31DCA0080F1EE /* Cog.scriptTerminology in Resources */, - 8E7575CE09F31DCA0080F1EE /* COMPILE in Resources */, - 8E7575CF09F31DCA0080F1EE /* COPYING in Resources */, 8E7575D009F31DCA0080F1EE /* Credits.html in Resources */, - 8E7575D109F31DCA0080F1EE /* README in Resources */, 8E7575DB09F31E930080F1EE /* Localizable.strings in Resources */, 177EC0440B8BC2FF0000BC8C /* add_blue.png in Resources */, 177EC0450B8BC2FF0000BC8C /* add_gray.png in Resources */, @@ -757,6 +759,7 @@ 1766C8970B912FB4004A7AE4 /* repeat_on.png in Resources */, 1766C8980B912FB4004A7AE4 /* shuffle_off.png in Resources */, 1766C8990B912FB4004A7AE4 /* shuffle_on.png in Resources */, + 179790F20C087B46001D6996 /* OpenURLPanel.nib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -811,6 +814,7 @@ 8E9A2E860BA78B500091081B /* SecondsFormatter.m in Sources */, 8E9A2EDA0BA78D9D0091081B /* IndexFormatter.m in Sources */, 8E9A30160BA792DC0091081B /* NSFileHandle+CreateFile.m in Sources */, + 179790E10C087AB7001D6996 /* OpenURLPanel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -825,6 +829,14 @@ name = InfoPlist.strings; sourceTree = ""; }; + 179790F00C087B46001D6996 /* OpenURLPanel.nib */ = { + isa = PBXVariantGroup; + children = ( + 179790F10C087B46001D6996 /* English */, + ); + name = OpenURLPanel.nib; + sourceTree = ""; + }; 29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = { isa = PBXVariantGroup; children = ( diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib index 1ccb753ed..c279543b4 100644 --- a/English.lproj/MainMenu.nib/classes.nib +++ b/English.lproj/MainMenu.nib/classes.nib @@ -14,15 +14,11 @@ }, { ACTIONS = { - addURL = id; - addURLSheetCancel = id; - addURLSheetOK = id; delEntries = id; donate = id; - loadPlaylist = id; openFiles = id; + openURL = id; savePlaylist = id; - savePlaylistAs = id; toggleFileDrawer = id; toggleInfoDrawer = id; }; diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 7172d9880..fddc0b6c9 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -34,12 +34,11 @@ 4 IBOpenObjects - 1307 1324 29 + 1156 513 21 - 1156 463 1063 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index f9205b7ce360a70a4b5c3984bd0073840858da41..0c18b95b21595ac67eed9c9d4c1f7e7f6a9475ba 100644 GIT binary patch delta 35248 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 Nh_wIf|Gz%?e*lg$Jg@)& delta 37520 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 + + + + IBDocumentLocation + 143 34 356 240 0 0 1680 1028 + IBFramework Version + 446.1 + IBOpenObjects + + 5 + + IBSystem Version + 8P2137 + + diff --git a/English.lproj/OpenURLPanel.nib/keyedobjects.nib b/English.lproj/OpenURLPanel.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..fa70f5e1763dadd23b68599bef81974cabf517a5 GIT binary patch literal 5732 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 literal 0 HcmV?d00001 diff --git a/Playlist/PlaylistLoader.h b/Playlist/PlaylistLoader.h index 67070026b..365d15f46 100755 --- a/Playlist/PlaylistLoader.h +++ b/Playlist/PlaylistLoader.h @@ -17,9 +17,6 @@ typedef enum { @interface PlaylistLoader : NSObject { IBOutlet PlaylistController *playlistController; - - PlaylistType currentType; //m3u or pls - NSString *currentFile; } //load arrays of urls... diff --git a/Playlist/PlaylistLoader.m b/Playlist/PlaylistLoader.m index 47c62a3aa..04c1d420e 100755 --- a/Playlist/PlaylistLoader.m +++ b/Playlist/PlaylistLoader.m @@ -34,11 +34,6 @@ } } -- (BOOL)save -{ - return [self save:currentFile asType:currentType]; -} - - (BOOL)save:(NSString *)filename { NSString *ext = [filename pathExtension]; @@ -161,9 +156,6 @@ [fileHandle closeFile]; - [self setCurrentFile:filename]; - [self setCurrentType:kPlaylistM3u]; - return YES; } @@ -230,9 +222,6 @@ [fileHandle writeData:[@"\nVERSION=2" dataUsingEncoding:NSUTF8StringEncoding]]; [fileHandle closeFile]; - [self setCurrentFile:filename]; - [self setCurrentType:kPlaylistM3u]; - return YES; } @@ -395,26 +384,4 @@ return [NSArray arrayWithObjects:@"m3u",@"pls",nil]; } -- (PlaylistType)currentType -{ - return currentType; -} - -- (void)setCurrentType:(PlaylistType)type -{ - currentType = type; -} - -- (NSString *)currentFile -{ - return currentFile; -} - -- (void)setCurrentFile:(NSString *)file -{ - [file retain]; - [currentFile release]; - currentFile = file; -} - @end diff --git a/ThirdParty/OpenURLPanel/OpenURLPanel.h b/ThirdParty/OpenURLPanel/OpenURLPanel.h new file mode 100755 index 000000000..8dc10da80 --- /dev/null +++ b/ThirdParty/OpenURLPanel/OpenURLPanel.h @@ -0,0 +1,94 @@ +/* + File: OpenURLPanel.h + + Originally introduced at WWDC 2004 at + Session 214, "Programming QuickTime with Cocoa." + Sample code is explained in detail in + "QTKit Programming Guide" documentation. + + + Copyright: © Copyright 2004, 2005 Apple Computer, Inc. + All rights reserved. + + Disclaimer: IMPORTANT: This Apple software is supplied to you by + Apple Computer, Inc. ("Apple") in consideration of your agreement to the + following terms, and your use, installation, modification or + redistribution of this Apple software constitutes acceptance of these + terms. If you do not agree with these terms, please do not use, + install, modify or redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a personal, non-exclusive + license, under AppleÕs copyrights in this original Apple software (the + "Apple Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Computer, + Inc. may be used to endorse or promote products derived from the Apple + Software without specific prior written permission from Apple. Except + as expressly stated in this notice, no other rights or licenses, express + or implied, are granted by Apple herein, including but not limited to + any patent rights that may be infringed by your derivative works or by + other works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE + MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +*/ + + +#import +#import + +@interface OpenURLPanel : NSObject +{ + // panel + IBOutlet NSPanel *mPanel; + IBOutlet NSComboBox *mUrlComboBox; + + // open url panel + id mDelegate; + SEL mDidEndSelector; + void *mContextInfo; + NSMutableArray *mUrlArray; + BOOL mIsSheet; +} + + // class methods ++ (id)openURLPanel; + + // getters +- (NSString *)urlString; +- (NSURL *)url; + + // setters +- (void)setURLArray:(NSMutableArray *)urlArray; + + // delegates +- (void)awakeFromNib; + + // notifications +- (void)writeURLs:(NSNotification *)notification; + + // actions +- (IBAction)doOpenURL:(id)sender; + + // methods +- (void)beginSheetWithWindow:(NSWindow *)window delegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo; +- (void)close; + +@end diff --git a/ThirdParty/OpenURLPanel/OpenURLPanel.m b/ThirdParty/OpenURLPanel/OpenURLPanel.m new file mode 100755 index 000000000..8a0e3265d --- /dev/null +++ b/ThirdParty/OpenURLPanel/OpenURLPanel.m @@ -0,0 +1,250 @@ +/* + File: OpenURLPanel.m + + Originally introduced at WWDC 2004 at + Session 214, "Programming QuickTime with Cocoa." + Sample code is explained in detail in + "QTKit Programming Guide" documentation. + + + Copyright: © Copyright 2004, 2005 Apple Computer, Inc. + All rights reserved. + + Disclaimer: IMPORTANT: This Apple software is supplied to you by + Apple Computer, Inc. ("Apple") in consideration of your agreement to the + following terms, and your use, installation, modification or + redistribution of this Apple software constitutes acceptance of these + terms. If you do not agree with these terms, please do not use, + install, modify or redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a personal, non-exclusive + license, under AppleÕs copyrights in this original Apple software (the + "Apple Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Computer, + Inc. may be used to endorse or promote products derived from the Apple + Software without specific prior written permission from Apple. Except + as expressly stated in this notice, no other rights or licenses, express + or implied, are granted by Apple herein, including but not limited to + any patent rights that may be infringed by your derivative works or by + other works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE + MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +*/ + + +#import "OpenURLPanel.h" + + // user defaults keys +#define kUserDefaultURLsKey @"UserDefaultURLsKey" + + // maximum urls +#define kMaximumURLs 15 + +@implementation OpenURLPanel + +static OpenURLPanel *openURLPanel = nil; + + // class methods ++ (id)openURLPanel +{ + if (openURLPanel == nil) + openURLPanel = [[self alloc] init]; + + return openURLPanel; +} + +- (id)init +{ + [super init]; + + // init + [self setURLArray:[NSMutableArray arrayWithCapacity:10]]; + + // listen for app termination notifications + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(writeURLs:) name:NSApplicationWillTerminateNotification object:NSApp]; + + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [self setURLArray:nil]; + [super dealloc]; +} + + // getters +- (NSString *)urlString +{ + NSString *urlString = nil; + + // get the url + urlString = [mUrlComboBox stringValue]; + + if (urlString == nil) + urlString = [mUrlComboBox objectValueOfSelectedItem]; + + if ([urlString length] == 0) + urlString = nil; + + return urlString; +} + +- (NSURL *)url +{ + NSURL *url = nil; + NSString *urlString; + + // get the url + urlString = [self urlString]; + + if (urlString) + url = [NSURL URLWithString:urlString]; + + return url; +} + + // setters +- (void)setURLArray:(NSMutableArray *)urlLArray +{ + [urlLArray retain]; + [mUrlArray retain]; + mUrlArray = urlLArray; +} + + // delegates +- (void)awakeFromNib +{ + NSArray *urls; + + // restore the previous urls + urls = [[NSUserDefaults standardUserDefaults] objectForKey:kUserDefaultURLsKey]; + [mUrlArray addObjectsFromArray:urls]; + + if (urls) + [mUrlComboBox addItemsWithObjectValues:urls]; +} + + // notifications +- (void)writeURLs:(NSNotification *)notification +{ + NSUserDefaults *userDefaults; + + if ([mUrlArray count]) + { + // init + userDefaults = [NSUserDefaults standardUserDefaults]; + + // write out the urls + [userDefaults setObject:mUrlArray forKey:kUserDefaultURLsKey]; + [userDefaults synchronize]; + } +} + + // actions +- (IBAction)doOpenURL:(id)sender +{ + NSString *urlString; + NSURL *url; + BOOL informDelegate = YES; + IMP callback; + + if ([sender tag] == NSOKButton) + { + // validate the URL + url = [self url]; + urlString = [self urlString]; + + if (url) + { + // save the url + if (![mUrlArray containsObject:urlString]) + { + // save the url + [mUrlArray addObject:urlString]; + + // add the url to the combo box + [mUrlComboBox addItemWithObjectValue:urlString]; + + // remove the oldest url if the maximum has been exceeded + if ([mUrlArray count] > kMaximumURLs) + { + [mUrlArray removeObjectAtIndex:0]; + [mUrlComboBox removeItemAtIndex:0]; + } + } + else + { + // move the url to the bottom of the list + [mUrlArray removeObject:urlString]; + [mUrlArray addObject:urlString]; + [mUrlComboBox removeItemWithObjectValue:urlString]; + [mUrlComboBox addItemWithObjectValue:urlString]; + } + } + else + { + if (mIsSheet) + NSRunAlertPanel(@"Invalid URL", @"The URL is not valid.", nil, nil, nil); + else + NSBeginAlertSheet(@"Invalid URL", nil, nil, nil, mPanel, nil, nil, nil, nil, @"The URL is not valid."); + + informDelegate = NO; + } + } + + // inform the delegate + if (informDelegate && mDelegate && mDidEndSelector) + { + callback = [mDelegate methodForSelector:mDidEndSelector]; + callback(mDelegate, mDidEndSelector, self, [sender tag], mContextInfo); + [self close]; + } +} + + // methods +- (void)beginSheetWithWindow:(NSWindow *)window delegate:(id)delegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo +{ + // will this run as a sheet + mIsSheet = (window ? YES : NO); + + // save the delegate, did end selector, and context info + mDelegate = delegate; + mDidEndSelector = (didEndSelector); + mContextInfo = contextInfo; + + // load the bundle (if necessary) + if (mPanel == nil) + [NSBundle loadNibNamed:@"OpenURLPanel" owner:self]; + + // start the sheet (or window) + [NSApp beginSheet:mPanel modalForWindow:window modalDelegate:nil didEndSelector:nil contextInfo:nil]; +} + +- (void)close +{ + // close it down + [NSApp endSheet:mPanel]; + [mPanel close]; +} + +@end