extra/MacOSX/VLC_app: Initial import of a wanna-be VLC.app application that use the...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Wed, 29 Aug 2007 19:48:10 +0000 (19:48 +0000)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Wed, 29 Aug 2007 19:48:10 +0000 (19:48 +0000)
16 files changed:
extras/MacOSX/VLC_app/English.lproj/InfoPlist.strings [new file with mode: 0644]
extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/classes.nib [new file with mode: 0644]
extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/info.nib [new file with mode: 0644]
extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/keyedobjects.nib [new file with mode: 0644]
extras/MacOSX/VLC_app/Info.plist [new file with mode: 0644]
extras/MacOSX/VLC_app/VLC.xcodeproj/project.pbxproj [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCCategoryCell.h [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCCategoryCell.m [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCCategoryListDataSource.h [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCCategoryListDataSource.m [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCCategoryOutlineView.h [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCCategoryOutlineView.m [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCController.h [new file with mode: 0644]
extras/MacOSX/VLC_app/VLCController.m [new file with mode: 0644]
extras/MacOSX/VLC_app/VLC_Prefix.pch [new file with mode: 0644]
extras/MacOSX/VLC_app/main.m [new file with mode: 0644]

diff --git a/extras/MacOSX/VLC_app/English.lproj/InfoPlist.strings b/extras/MacOSX/VLC_app/English.lproj/InfoPlist.strings
new file mode 100644 (file)
index 0000000..414ca3b
Binary files /dev/null and b/extras/MacOSX/VLC_app/English.lproj/InfoPlist.strings differ
diff --git a/extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/classes.nib b/extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/classes.nib
new file mode 100644 (file)
index 0000000..569770b
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; }, 
+        {CLASS = VLCCategoryListDataSource; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {CLASS = VLCCategoryOutlineView; LANGUAGE = ObjC; SUPERCLASS = NSOutlineView; }, 
+        {
+            CLASS = VLCController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {categoryList = id; detailList = id; detailSearchField = id; videoView = id; }; 
+            SUPERCLASS = NSObject; 
+        }, 
+        {CLASS = VLCVideoView; LANGUAGE = ObjC; SUPERCLASS = NSView; }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/info.nib b/extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/info.nib
new file mode 100644 (file)
index 0000000..fd2caf0
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>269 541 530 314 0 0 1680 1028 </string>
+       <key>IBEditorPositions</key>
+       <dict>
+               <key>29</key>
+               <string>141 525 338 44 0 0 1680 1028 </string>
+       </dict>
+       <key>IBFramework Version</key>
+       <string>446.1</string>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>21</integer>
+               <integer>29</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>8R218</string>
+</dict>
+</plist>
diff --git a/extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/keyedobjects.nib b/extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..175de53
Binary files /dev/null and b/extras/MacOSX/VLC_app/English.lproj/MainMenu.nib/keyedobjects.nib differ
diff --git a/extras/MacOSX/VLC_app/Info.plist b/extras/MacOSX/VLC_app/Info.plist
new file mode 100644 (file)
index 0000000..212304d
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIconFile</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>com.yourcompany.VLC</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>${PRODUCT_NAME}</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1.0</string>
+       <key>NSMainNibFile</key>
+       <string>MainMenu</string>
+       <key>NSPrincipalClass</key>
+       <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/extras/MacOSX/VLC_app/VLC.xcodeproj/project.pbxproj b/extras/MacOSX/VLC_app/VLC.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..144fc0d
--- /dev/null
@@ -0,0 +1,333 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 42;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               635FDAEF0C8080B900CE5E69 /* VLCCategoryOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 635FDAED0C8080B900CE5E69 /* VLCCategoryOutlineView.m */; };
+               635FDAF00C8080B900CE5E69 /* VLCCategoryOutlineView.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 635FDAEE0C8080B900CE5E69 /* VLCCategoryOutlineView.h */; };
+               635FDB3D0C8083BC00CE5E69 /* VLCCategoryCell.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 635FDB3B0C8083BC00CE5E69 /* VLCCategoryCell.h */; };
+               635FDB3E0C8083BC00CE5E69 /* VLCCategoryCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 635FDB3C0C8083BC00CE5E69 /* VLCCategoryCell.m */; };
+               63C551690C7F62EC00B202D3 /* VLC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63C551680C7F62EC00B202D3 /* VLC.framework */; };
+               63C551830C7F639600B202D3 /* VLC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 63C551680C7F62EC00B202D3 /* VLC.framework */; };
+               63C5518C0C7F663500B202D3 /* VLCController.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 63C5518A0C7F663500B202D3 /* VLCController.h */; };
+               63C5518D0C7F663500B202D3 /* VLCController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63C5518B0C7F663500B202D3 /* VLCController.m */; };
+               63C551900C7F6A2000B202D3 /* VLCCategoryListDataSource.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 63C5518E0C7F6A2000B202D3 /* VLCCategoryListDataSource.h */; };
+               63C551910C7F6A2000B202D3 /* VLCCategoryListDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 63C5518F0C7F6A2000B202D3 /* VLCCategoryListDataSource.m */; };
+               8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
+               8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
+               8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
+               8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               63C551810C7F638000B202D3 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 10;
+                       files = (
+                               63C551830C7F639600B202D3 /* VLC.framework in CopyFiles */,
+                               63C5518C0C7F663500B202D3 /* VLCController.h in CopyFiles */,
+                               63C551900C7F6A2000B202D3 /* VLCCategoryListDataSource.h in CopyFiles */,
+                               635FDAF00C8080B900CE5E69 /* VLCCategoryOutlineView.h in CopyFiles */,
+                               635FDB3D0C8083BC00CE5E69 /* VLCCategoryCell.h in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+               1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+               13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
+               29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+               29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
+               29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
+               29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+               32CA4F630368D1EE00C91783 /* VLC_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLC_Prefix.pch; sourceTree = "<group>"; };
+               635FDAED0C8080B900CE5E69 /* VLCCategoryOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCCategoryOutlineView.m; sourceTree = "<group>"; };
+               635FDAEE0C8080B900CE5E69 /* VLCCategoryOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VLCCategoryOutlineView.h; sourceTree = "<group>"; };
+               635FDB3B0C8083BC00CE5E69 /* VLCCategoryCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCCategoryCell.h; sourceTree = "<group>"; };
+               635FDB3C0C8083BC00CE5E69 /* VLCCategoryCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCCategoryCell.m; sourceTree = "<group>"; };
+               63C551680C7F62EC00B202D3 /* VLC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VLC.framework; path = ../../VLC.framework; sourceTree = SOURCE_ROOT; };
+               63C5518A0C7F663500B202D3 /* VLCController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VLCController.h; sourceTree = "<group>"; };
+               63C5518B0C7F663500B202D3 /* VLCController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCController.m; sourceTree = "<group>"; };
+               63C5518E0C7F6A2000B202D3 /* VLCCategoryListDataSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VLCCategoryListDataSource.h; sourceTree = "<group>"; };
+               63C5518F0C7F6A2000B202D3 /* VLCCategoryListDataSource.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VLCCategoryListDataSource.m; sourceTree = "<group>"; };
+               8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+               8D1107320486CEB800E47090 /* VLC.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VLC.app; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               8D11072E0486CEB800E47090 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
+                               63C551690C7F62EC00B202D3 /* VLC.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               080E96DDFE201D6D7F000001 /* Classes */ = {
+                       isa = PBXGroup;
+                       children = (
+                               63C5518A0C7F663500B202D3 /* VLCController.h */,
+                               63C5518B0C7F663500B202D3 /* VLCController.m */,
+                               63C5518E0C7F6A2000B202D3 /* VLCCategoryListDataSource.h */,
+                               63C5518F0C7F6A2000B202D3 /* VLCCategoryListDataSource.m */,
+                               635FDAEE0C8080B900CE5E69 /* VLCCategoryOutlineView.h */,
+                               635FDAED0C8080B900CE5E69 /* VLCCategoryOutlineView.m */,
+                               635FDB3B0C8083BC00CE5E69 /* VLCCategoryCell.h */,
+                               635FDB3C0C8083BC00CE5E69 /* VLCCategoryCell.m */,
+                       );
+                       name = Classes;
+                       sourceTree = "<group>";
+               };
+               1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
+                       isa = PBXGroup;
+                       children = (
+                               63C551680C7F62EC00B202D3 /* VLC.framework */,
+                               1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+                       );
+                       name = "Linked Frameworks";
+                       sourceTree = "<group>";
+               };
+               1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
+                       isa = PBXGroup;
+                       children = (
+                               29B97324FDCFA39411CA2CEA /* AppKit.framework */,
+                               13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
+                               29B97325FDCFA39411CA2CEA /* Foundation.framework */,
+                       );
+                       name = "Other Frameworks";
+                       sourceTree = "<group>";
+               };
+               19C28FACFE9D520D11CA2CBB /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               8D1107320486CEB800E47090 /* VLC.app */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               29B97314FDCFA39411CA2CEA /* VLC */ = {
+                       isa = PBXGroup;
+                       children = (
+                               080E96DDFE201D6D7F000001 /* Classes */,
+                               29B97315FDCFA39411CA2CEA /* Other Sources */,
+                               29B97317FDCFA39411CA2CEA /* Resources */,
+                               29B97323FDCFA39411CA2CEA /* Frameworks */,
+                               19C28FACFE9D520D11CA2CBB /* Products */,
+                       );
+                       name = VLC;
+                       sourceTree = "<group>";
+               };
+               29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+                       isa = PBXGroup;
+                       children = (
+                               32CA4F630368D1EE00C91783 /* VLC_Prefix.pch */,
+                               29B97316FDCFA39411CA2CEA /* main.m */,
+                       );
+                       name = "Other Sources";
+                       sourceTree = "<group>";
+               };
+               29B97317FDCFA39411CA2CEA /* Resources */ = {
+                       isa = PBXGroup;
+                       children = (
+                               63C551960C7F6AD100B202D3 /* Images */,
+                               8D1107310486CEB800E47090 /* Info.plist */,
+                               089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+                               29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
+                       );
+                       name = Resources;
+                       sourceTree = "<group>";
+               };
+               29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+                       isa = PBXGroup;
+                       children = (
+                               1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
+                               1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
+                       );
+                       name = Frameworks;
+                       sourceTree = "<group>";
+               };
+               63C551960C7F6AD100B202D3 /* Images */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       name = Images;
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               8D1107260486CEB800E47090 /* VLC */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "VLC" */;
+                       buildPhases = (
+                               63C551810C7F638000B202D3 /* CopyFiles */,
+                               8D1107290486CEB800E47090 /* Resources */,
+                               8D11072C0486CEB800E47090 /* Sources */,
+                               8D11072E0486CEB800E47090 /* Frameworks */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = VLC;
+                       productInstallPath = "$(HOME)/Applications";
+                       productName = VLC;
+                       productReference = 8D1107320486CEB800E47090 /* VLC.app */;
+                       productType = "com.apple.product-type.application";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               29B97313FDCFA39411CA2CEA /* Project object */ = {
+                       isa = PBXProject;
+                       buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "VLC" */;
+                       hasScannedForEncodings = 1;
+                       mainGroup = 29B97314FDCFA39411CA2CEA /* VLC */;
+                       projectDirPath = "";
+                       targets = (
+                               8D1107260486CEB800E47090 /* VLC */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+               8D1107290486CEB800E47090 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */,
+                               8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+               8D11072C0486CEB800E47090 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               8D11072D0486CEB800E47090 /* main.m in Sources */,
+                               63C5518D0C7F663500B202D3 /* VLCController.m in Sources */,
+                               63C551910C7F6A2000B202D3 /* VLCCategoryListDataSource.m in Sources */,
+                               635FDAEF0C8080B900CE5E69 /* VLCCategoryOutlineView.m in Sources */,
+                               635FDB3E0C8083BC00CE5E69 /* VLCCategoryCell.m in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+               089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               089C165DFE840E0CC02AAC07 /* English */,
+                       );
+                       name = InfoPlist.strings;
+                       sourceTree = "<group>";
+               };
+               29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               29B97319FDCFA39411CA2CEA /* English */,
+                       );
+                       name = MainMenu.nib;
+                       sourceTree = "<group>";
+               };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+               C01FCF4B08A954540054247B /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               COPY_PHASE_STRIP = NO;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../..\"";
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_FIX_AND_CONTINUE = YES;
+                               GCC_MODEL_TUNING = G5;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               INFOPLIST_FILE = Info.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               PRODUCT_NAME = VLC;
+                               WRAPPER_EXTENSION = app;
+                               ZERO_LINK = YES;
+                       };
+                       name = Debug;
+               };
+               C01FCF4C08A954540054247B /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ARCHS = "$(NATIVE_ARCH)";
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)",
+                               );
+                               FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/../..\"";
+                               GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+                               GCC_MODEL_TUNING = G5;
+                               INFOPLIST_FILE = Info.plist;
+                               INSTALL_PATH = "$(HOME)/Applications";
+                               PRODUCT_NAME = VLC;
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Release;
+               };
+               C01FCF4F08A954540054247B /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                       };
+                       name = Debug;
+               };
+               C01FCF5008A954540054247B /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               PREBINDING = NO;
+                       };
+                       name = Release;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "VLC" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               C01FCF4B08A954540054247B /* Debug */,
+                               C01FCF4C08A954540054247B /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               C01FCF4E08A954540054247B /* Build configuration list for PBXProject "VLC" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               C01FCF4F08A954540054247B /* Debug */,
+                               C01FCF5008A954540054247B /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/extras/MacOSX/VLC_app/VLCCategoryCell.h b/extras/MacOSX/VLC_app/VLCCategoryCell.h
new file mode 100644 (file)
index 0000000..de8b9c0
--- /dev/null
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ * VLCCategoryCell.h: VLC.app custom cell
+ * Most of the code here from Colloquy (GPL v2)
+ *****************************************************************************
+ * Copyright (C) 2007 Pierre d'Herbemont
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#import <Cocoa/Cocoa.h>
+
+
+@interface VLCCategoryCell : NSImageCell {
+       @private
+       NSImage *_statusImage;
+       NSImage *_altImage;
+       NSString *_mainText;
+       NSString *_infoText;
+       NSLineBreakMode _lineBreakMode;
+       unsigned _statusNumber;
+       unsigned _importantStatusNumber;
+       BOOL _boldAndWhiteOnHighlight;
+       BOOL _selectable;
+}
+- (void) setStatusImage:(NSImage *) image;
+- (NSImage *) statusImage;
+
+- (void) setHighlightedImage:(NSImage *) image;
+- (NSImage *) highlightedImage;
+
+- (void) setMainText:(NSString *) text;
+- (NSString *) mainText;
+
+- (void) setInformationText:(NSString *) text;
+- (NSString *) informationText;
+
+- (void) setLineBreakMode:(NSLineBreakMode) mode;
+- (NSLineBreakMode) lineBreakMode;
+
+- (void) setBoldAndWhiteOnHighlight:(BOOL) boldAndWhite;
+- (BOOL) boldAndWhiteOnHighlight;
+
+- (void) setStatusNumber:(unsigned) number;
+- (unsigned) statusNumber;
+
+- (void) setImportantStatusNumber:(unsigned) number;
+- (unsigned) importantStatusNumber;
+@end
diff --git a/extras/MacOSX/VLC_app/VLCCategoryCell.m b/extras/MacOSX/VLC_app/VLCCategoryCell.m
new file mode 100644 (file)
index 0000000..1b5dbdd
--- /dev/null
@@ -0,0 +1,387 @@
+/*****************************************************************************
+ * VLCCategoryCell.h: VLC.app custom cell
+ * Most of the code here from Colloquy (GPL v2)
+ *****************************************************************************
+ * Copyright (C) 2007 Pierre d'Herbemont
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#import "VLCCategoryCell.h"
+
+@implementation VLCCategoryCell
+- (id) init {
+       if( ( self = [super init] ) ) {
+               _altImage = nil;
+               _statusImage = nil;
+               _mainText = nil;
+               _infoText = nil;
+        _boldAndWhiteOnHighlight = YES;
+        _selectable = YES;
+
+               [self setImageAlignment:NSImageAlignLeft];
+               [self setImageScaling:NSScaleProportionally];
+               [self setImageFrameStyle:NSImageFrameNone];
+               [self setLineBreakMode:NSLineBreakByTruncatingTail];
+       }
+
+       return self;
+}
+
+- (id) copyWithZone:(NSZone *) zone {
+       VLCCategoryCell *cell = (VLCCategoryCell *)[super copyWithZone:zone];
+       cell -> _statusImage = [_statusImage retain];
+       cell -> _altImage = [_altImage retain];
+       cell -> _mainText = [_mainText copyWithZone:zone];
+       cell -> _infoText = [_infoText copyWithZone:zone];
+       cell -> _lineBreakMode = _lineBreakMode;
+       return cell;
+}
+
+- (void) dealloc {
+       [_altImage release];
+       [_statusImage release];
+       [_mainText release];
+       [_infoText release];
+
+       _altImage = nil;
+       _statusImage = nil;
+       _mainText = nil;
+       _infoText = nil;
+
+       [super dealloc];
+}
+
+#pragma mark -
+
+- (void) setStatusImage:(NSImage *) image {
+       [_statusImage autorelease];
+       _statusImage = [image retain];
+}
+
+- (NSImage *) statusImage {
+       return _statusImage;
+}
+
+#pragma mark -
+
+- (void) setStatusNumber:(unsigned) number {
+       _statusNumber = number;
+}
+
+- (unsigned) statusNumber {
+       return _statusNumber;
+}
+
+#pragma mark -
+
+- (void) setImportantStatusNumber:(unsigned) number {
+       _importantStatusNumber = number;
+}
+
+- (unsigned) importantStatusNumber {
+       return _importantStatusNumber;
+}
+
+#pragma mark -
+
+- (void) setHighlightedImage:(NSImage *) image {
+       [_altImage autorelease];
+       _altImage = [image retain];
+}
+
+- (NSImage *) highlightedImage {
+       return _altImage;
+}
+
+#pragma mark -
+- (void) setSelectable:(BOOL) selectable {
+       _selectable = selectable;
+}
+
+- (BOOL) selectable {
+       return _selectable;
+}
+
+#pragma mark -
+
+- (void) setMainText:(NSString *) text {
+       [_mainText autorelease];
+       _mainText = [text copy];
+}
+
+- (NSString *) mainText {
+       return _mainText;
+}
+
+#pragma mark -
+
+- (void) setInformationText:(NSString *) text {
+       [_infoText autorelease];
+       _infoText = [text copy];
+}
+
+- (NSString *) informationText {
+       return _infoText;
+}
+
+#pragma mark -
+
+- (void) setBoldAndWhiteOnHighlight:(BOOL) boldAndWhite {
+       _boldAndWhiteOnHighlight = boldAndWhite;
+}
+
+- (BOOL) boldAndWhiteOnHighlight {
+       return _boldAndWhiteOnHighlight;
+}
+
+#pragma mark -
+
+- (void) drawWithFrame:(NSRect) cellFrame inView:(NSView *) controlView {
+       float imageWidth = 0.;
+       BOOL highlighted = ( [self isHighlighted] && [[controlView window] firstResponder] == controlView && [[controlView window] isKeyWindow] && [[NSApplication sharedApplication] isActive] );
+
+       NSMutableParagraphStyle *paraStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease];
+       [paraStyle setLineBreakMode:_lineBreakMode];
+       [paraStyle setAlignment:[self alignment]];
+
+       NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithObjectsAndKeys:[self font], NSFontAttributeName, paraStyle, NSParagraphStyleAttributeName, ( [self isEnabled] ? ( highlighted ? [NSColor alternateSelectedControlTextColor] : [NSColor controlTextColor] ) : ( highlighted ? [NSColor alternateSelectedControlTextColor] : [[NSColor controlTextColor] colorWithAlphaComponent:0.50] ) ), NSForegroundColorAttributeName, nil];
+       NSMutableDictionary *subAttributes = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSFont toolTipsFontOfSize:9.], NSFontAttributeName, paraStyle, NSParagraphStyleAttributeName, ( [self isEnabled] ? ( highlighted ? [NSColor alternateSelectedControlTextColor] : [[NSColor controlTextColor] colorWithAlphaComponent:0.75] ) : ( highlighted ? [NSColor alternateSelectedControlTextColor] : [[NSColor controlTextColor] colorWithAlphaComponent:0.40] ) ), NSForegroundColorAttributeName, nil];
+       NSImage *mainImage = nil, *curImage = nil;
+       NSSize mainStringSize = [_mainText sizeWithAttributes:attributes];
+       NSSize subStringSize = [_infoText sizeWithAttributes:subAttributes];
+
+       if( _boldAndWhiteOnHighlight && [self isHighlighted] ) {
+               NSFont *boldFont = [[NSFontManager sharedFontManager] fontWithFamily:@"Lucida Grande" traits:0 weight:15 size:11.];
+               NSShadow *shadow = [[NSShadow allocWithZone:nil] init];
+               NSColor *whiteColor = [NSColor whiteColor];
+               if( ! [self isEnabled] ) whiteColor = [whiteColor colorWithAlphaComponent:0.5];
+
+        [shadow setShadowOffset:NSMakeSize( 0, -1 )];
+               [shadow setShadowBlurRadius:0.1];
+               [shadow setShadowColor:[[NSColor shadowColor] colorWithAlphaComponent:0.2]];
+
+               [attributes setObject:boldFont forKey:NSFontAttributeName];
+               [attributes setObject:whiteColor forKey:NSForegroundColorAttributeName];
+               [attributes setObject:shadow forKey:NSShadowAttributeName];
+
+               boldFont = [[NSFontManager sharedFontManager] fontWithFamily:@"Lucida Grande" traits:0 weight:15 size:9.];
+               [subAttributes setObject:boldFont forKey:NSFontAttributeName];
+               [subAttributes setObject:whiteColor forKey:NSForegroundColorAttributeName];
+               [subAttributes setObject:shadow forKey:NSShadowAttributeName];
+               [shadow release];
+       }
+    else /*if( [self selectable] )
+    {
+        [self setMainText: [_mainText uppercaseString]];
+               [attributes setObject:[NSColor grayColor] forKey:NSForegroundColorAttributeName];
+    }
+    else*/
+    {
+        NSFont *font = [[NSFontManager sharedFontManager] fontWithFamily:@"Lucida Grande" traits:0 weight:1 size:11.];
+               [attributes setObject:font forKey:NSFontAttributeName];
+    }
+
+       if( highlighted && _altImage ) {
+               mainImage = [[self image] retain];
+               [self setImage:_altImage];
+       }
+
+       if( ! [self isEnabled] && [self image] ) {
+               NSImage *fadedImage = [[[NSImage alloc] initWithSize:[[self image] size]] autorelease];
+               [fadedImage lockFocus];
+               [[self image] dissolveToPoint:NSMakePoint( 0., 0. ) fraction:0.5];
+               [fadedImage unlockFocus];
+               curImage = [[self image] retain];
+               [self setImage:fadedImage];
+       }
+
+       cellFrame = NSMakeRect( cellFrame.origin.x + 1., cellFrame.origin.y, cellFrame.size.width - 1., cellFrame.size.height );
+       [super drawWithFrame:cellFrame inView:controlView];
+
+       if( ! [self isEnabled] ) {
+               [self setImage:curImage];
+               [curImage autorelease];
+       }
+
+       if( highlighted && mainImage ) {
+               [self setImage:mainImage];
+               [mainImage autorelease];
+       }
+
+       if( [self image] ) {
+               switch( [self imageScaling] ) {
+               case NSScaleProportionally:
+                       if( NSHeight( cellFrame ) < [[self image] size].height )
+                               imageWidth = ( NSHeight( cellFrame ) / [[self image] size].height ) * [[self image] size].width;
+                       else imageWidth = [[self image] size].width;
+                       break;
+               default:
+               case NSScaleNone:
+                       imageWidth = [[self image] size].width;
+                       break;
+               case NSScaleToFit:
+                       imageWidth = [[self image] size].width;
+                       break;
+               }
+       }
+
+#define JVDetailCellLabelPadding 3.
+#define JVDetailCellImageLabelPadding 5.
+#define JVDetailCellTextLeading 3.
+#define JVDetailCellStatusImageLeftPadding 2.
+#define JVDetailCellStatusImageRightPadding JVDetailCellStatusImageLeftPadding
+
+       float statusWidth = ( _statusImage ? [_statusImage size].width + JVDetailCellStatusImageRightPadding : 0. );
+       if( ! _statusImage && ( _statusNumber || _importantStatusNumber ) ) {
+               NSColor *textColor = [NSColor whiteColor];
+               NSColor *backgroundColor = [NSColor colorWithCalibratedRed:0.6 green:0.6705882352941176 blue:0.7725490196078431 alpha:1.];
+               NSColor *importantColor = [NSColor colorWithCalibratedRed:0.831372549019608 green:0.572549019607843 blue:0.541176470588235 alpha:1.];
+
+               if( ! _statusNumber && _importantStatusNumber )
+                       backgroundColor = importantColor;
+
+               if( [self isHighlighted] ) {
+                       textColor = [backgroundColor shadowWithLevel:0.2];
+                       backgroundColor = [backgroundColor highlightWithLevel:0.7];
+               }
+
+               NSFont *font = [[NSFontManager sharedFontManager] fontWithFamily:@"Lucida Grande" traits:NSBoldFontMask weight:9 size:11.];
+               NSMutableParagraphStyle *numberParaStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease];
+               [numberParaStyle setAlignment:NSCenterTextAlignment];
+
+               NSDictionary *statusNumberAttributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, numberParaStyle, NSParagraphStyleAttributeName, textColor, NSForegroundColorAttributeName, [NSNumber numberWithFloat:1.0], NSKernAttributeName, nil];
+
+               NSString *statusText = [NSString stringWithFormat:@"%d", ( _statusNumber ? _statusNumber : _importantStatusNumber )];
+               NSSize numberSize = [statusText sizeWithAttributes:statusNumberAttributes];
+               statusWidth = numberSize.width + 12.;
+
+               if( imageWidth + ( imageWidth ? JVDetailCellImageLabelPadding : JVDetailCellLabelPadding ) + statusWidth < NSWidth( cellFrame ) ) {
+                       float radius = ( _importantStatusNumber ? 8. : 7. );
+                       NSRect mainRect = NSMakeRect( NSMinX( cellFrame ) + NSWidth( cellFrame ) - statusWidth - 2., NSMinY( cellFrame ) + ( ( NSHeight( cellFrame ) / 2 ) - radius ), statusWidth, radius * 2 );
+                       NSRect pathRect = NSInsetRect( mainRect, radius, radius );
+
+                       NSBezierPath *mainPath = [NSBezierPath bezierPath];
+                       [mainPath appendBezierPathWithArcWithCenter:NSMakePoint( NSMinX( pathRect ), NSMinY( pathRect ) ) radius:radius startAngle:180. endAngle:270.];
+                       [mainPath appendBezierPathWithArcWithCenter:NSMakePoint( NSMaxX( pathRect ), NSMinY( pathRect ) ) radius:radius startAngle:270. endAngle:360.];
+                       [mainPath appendBezierPathWithArcWithCenter:NSMakePoint( NSMaxX( pathRect ), NSMaxY( pathRect ) ) radius:radius startAngle:0. endAngle:90.];
+                       [mainPath appendBezierPathWithArcWithCenter:NSMakePoint( NSMinX( pathRect ), NSMaxY( pathRect ) ) radius:radius startAngle:90. endAngle:180.];
+                       [mainPath closePath];
+
+                       if( _importantStatusNumber ) {
+                               NSString *importantStatusText = [NSString stringWithFormat:@"%d", _importantStatusNumber];
+                               numberSize = [importantStatusText sizeWithAttributes:statusNumberAttributes];
+                               float mainStatusWidth = statusWidth;
+                               statusWidth += numberSize.width + 10.;
+                               radius = 7.;
+
+                               NSRect rect = NSMakeRect( NSMinX( cellFrame ) + NSWidth( cellFrame ) - statusWidth - 2., NSMinY( cellFrame ) + ( ( NSHeight( cellFrame ) / 2 ) - radius ), statusWidth - mainStatusWidth + 10., radius * 2 );
+                               pathRect = NSInsetRect( rect, radius, radius );
+
+                               NSBezierPath *path = [NSBezierPath bezierPath];
+                               [path appendBezierPathWithArcWithCenter:NSMakePoint( NSMinX( pathRect ), NSMinY( pathRect ) ) radius:radius startAngle:180. endAngle:270.];
+                               [path appendBezierPathWithArcWithCenter:NSMakePoint( NSMaxX( pathRect ), NSMinY( pathRect ) ) radius:radius startAngle:270. endAngle:360.];
+                               [path appendBezierPathWithArcWithCenter:NSMakePoint( NSMaxX( pathRect ), NSMaxY( pathRect ) ) radius:radius startAngle:0. endAngle:90.];
+                               [path appendBezierPathWithArcWithCenter:NSMakePoint( NSMinX( pathRect ), NSMaxY( pathRect ) ) radius:radius startAngle:90. endAngle:180.];
+                               [path closePath];
+
+                               if( [self isHighlighted] ) [[NSColor whiteColor] set];
+                               else [[NSColor colorWithCalibratedRed:0.92156862745098 green:0.231372549019608 blue:0.243137254901961 alpha:0.85] set];
+                               [path fill];
+
+                               rect.origin.x -= 3.;
+                               [importantStatusText drawInRect:rect withAttributes:statusNumberAttributes];
+                       }
+
+                       [backgroundColor set];
+                       [mainPath fill];
+
+                       if( _importantStatusNumber ) {
+                               if( [self isHighlighted] ) [[NSColor colorWithCalibratedRed:0.5803921568627451 green:0.6705882352941176 blue:0.7882352941176471 alpha:1.] set];
+                               else [[NSColor whiteColor] set];
+
+                               [mainPath setLineWidth:1.25];
+                               [mainPath stroke];
+                       }
+
+                       if( _importantStatusNumber ) mainRect.origin.y += 1.;
+                       [statusText drawInRect:mainRect withAttributes:statusNumberAttributes];
+
+                       statusWidth += JVDetailCellStatusImageRightPadding + 3.;
+
+               } else statusWidth = 0.;
+       }
+
+       if( ( ! [_infoText length] && [_mainText length] ) || ( ( subStringSize.height + mainStringSize.height ) >= NSHeight( cellFrame ) - 2. ) ) {
+               float mainYLocation = 0.;
+
+               if( NSHeight( cellFrame ) >= mainStringSize.height ) {
+                       mainYLocation = NSMinY( cellFrame ) + ( NSHeight( cellFrame ) / 2 ) - ( mainStringSize.height / 2 );
+                       [_mainText drawInRect:NSMakeRect( NSMinX( cellFrame ) + imageWidth + ( imageWidth ? JVDetailCellImageLabelPadding : JVDetailCellLabelPadding ), mainYLocation, NSWidth( cellFrame ) - imageWidth - ( JVDetailCellImageLabelPadding * 1. ) - statusWidth, [_mainText sizeWithAttributes:attributes].height ) withAttributes:attributes];
+               }
+       } else if( [_infoText length] && [_mainText length] ) {
+               float mainYLocation = 0., subYLocation = 0.;
+
+               if( NSHeight( cellFrame ) >= mainStringSize.height ) {
+                       mainYLocation = NSMinY( cellFrame ) + ( NSHeight( cellFrame ) / 2 ) - mainStringSize.height + ( JVDetailCellTextLeading / 2. );
+                       [_mainText drawInRect:NSMakeRect( cellFrame.origin.x + imageWidth + ( imageWidth ? JVDetailCellImageLabelPadding : JVDetailCellLabelPadding ), mainYLocation, NSWidth( cellFrame ) - imageWidth - ( JVDetailCellImageLabelPadding * 1. ) - statusWidth, [_mainText sizeWithAttributes:attributes].height ) withAttributes:attributes];
+
+                       subYLocation = NSMinY( cellFrame ) + ( NSHeight( cellFrame ) / 2 ) + subStringSize.height - mainStringSize.height + ( JVDetailCellTextLeading / 2. );
+                       [_infoText drawInRect:NSMakeRect( NSMinX( cellFrame ) + imageWidth + ( imageWidth ? JVDetailCellImageLabelPadding : JVDetailCellLabelPadding ), subYLocation, NSWidth( cellFrame ) - imageWidth - ( JVDetailCellImageLabelPadding * 1. ) - statusWidth, [_infoText sizeWithAttributes:subAttributes].height ) withAttributes:subAttributes];
+               }
+       }
+
+       if( _statusImage && NSHeight( cellFrame ) >= [_statusImage size].height ) {
+               [_statusImage compositeToPoint:NSMakePoint( NSMinX( cellFrame ) + NSWidth( cellFrame ) - statusWidth, NSMaxY( cellFrame ) - ( ( NSHeight( cellFrame ) / 2 ) - ( [_statusImage size].height / 2 ) ) ) operation:NSCompositeSourceAtop fraction:( [self isEnabled] ? 1. : 0.5)];
+       }
+}
+
+#pragma mark -
+
+- (void) setImageScaling:(NSImageScaling) newScaling {
+       [super setImageScaling:( newScaling == NSScaleProportionally || newScaling == NSScaleNone ? newScaling : NSScaleProportionally )];
+}
+
+- (void) setImageAlignment:(NSImageAlignment) newAlign {
+       [super setImageAlignment:NSImageAlignLeft];
+}
+
+- (void) setLineBreakMode:(NSLineBreakMode) mode {
+       _lineBreakMode = mode;
+}
+
+- (NSLineBreakMode) lineBreakMode {
+       return _lineBreakMode;
+}
+
+- (void) setStringValue:(NSString *) string {
+       [self setMainText:string];
+}
+
+- (void) setObjectValue:(id <NSCopying>) obj {
+       if( ! obj || [(NSObject *)obj isKindOfClass:[NSImage class]] ) {
+               [super setObjectValue:obj];
+       } else if( [(NSObject *)obj isKindOfClass:[NSString class]] ) {
+               [self setMainText:(NSString *)obj];
+       }
+}
+
+- (NSString *) stringValue {
+       return _mainText;
+}
+@end
diff --git a/extras/MacOSX/VLC_app/VLCCategoryListDataSource.h b/extras/MacOSX/VLC_app/VLCCategoryListDataSource.h
new file mode 100644 (file)
index 0000000..f41751d
--- /dev/null
@@ -0,0 +1,31 @@
+/*****************************************************************************
+ * VLCCategoryListDataSource.h: VLC.app custom outline view
+ *****************************************************************************
+ * Copyright (C) 2007 Pierre d'Herbemont
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+@interface VLCCategoryListDataSource : NSObject
+{
+    NSArray * mainCategories;
+}
+@end
diff --git a/extras/MacOSX/VLC_app/VLCCategoryListDataSource.m b/extras/MacOSX/VLC_app/VLCCategoryListDataSource.m
new file mode 100644 (file)
index 0000000..0412f68
--- /dev/null
@@ -0,0 +1,152 @@
+/*****************************************************************************
+ * VLCCategoryListDataSource.h: VLC.app custom outline view
+ *****************************************************************************
+ * Copyright (C) 2007 Pierre d'Herbemont
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <VLC/VLC.h>
+#import "VLCCategoryListDataSource.h"
+
+@implementation VLCCategoryListDataSource
+- (id)init
+{
+    if( self = [super init] )
+    {
+        /* No need to release, cause we keep it around forever */
+        mainCategories = [[NSArray arrayWithObjects: [VLCMediaLibrary sharedMediaLibrary],
+                                                     @"Services Discovery",
+                                                     @"Playlists", nil] retain];
+    }
+    return self;
+}
+
+- (id)outlineView:(NSOutlineView *)aOutlineView child:(int)index ofItem:(id)item
+{
+    if( !item )
+    {
+        return [mainCategories objectAtIndex: index];
+    }
+    if ([item isKindOfClass: [NSString class]])
+    {
+        if([item isEqualToString: @"Services Discovery"])
+            return [[[VLCServicesDiscoverer sharedDiscoverer] services] objectAtIndex: index];
+        if([item isEqualToString: @"Playlists"])
+            return [[[[VLCMediaLibrary sharedMediaLibrary] playlists] objectAtIndex: index] retain]; /* XXX: this is a leak, but this code needs rework */
+    }
+    if ([item isKindOfClass: [VLCMediaLibrary class]])
+        return nil;
+#if 0
+    if ([item isKindOfClass: [VLCMediaDiscoverer class]])
+    {
+        return nil;
+    }
+#endif
+    if ([item isKindOfClass: [VLCPlaylist class]])
+    {
+        return [[[item sublists] objectAtIndex: index] retain];  /* XXX: this is a leak, but this code needs rework */
+    }
+    return nil;
+}
+
+- (BOOL)outlineView:(NSOutlineView *)aOutlineView isItemExpandable:(id)item
+{
+    if (!item)
+        return YES;
+
+    if ([item isKindOfClass: [NSString class]])
+    {
+        if([item isEqualToString: @"Services Discovery"])
+            return YES;
+        if([item isEqualToString: @"Playlists"])
+            return YES;
+    }
+    if ([item isKindOfClass: [VLCMediaLibrary class]])
+        return NO;
+
+    if ([item isKindOfClass: [VLCPlaylist class]])
+    {
+        return [[item sublists] count] > 0;
+    }
+
+    return NO;
+}
+
+- (int)outlineView:(NSOutlineView *)aOutlineView numberOfChildrenOfItem:(id)item
+{
+    if (!item)
+        return [mainCategories count];
+    if ([item isKindOfClass: [NSString class]])
+    {
+        if([item isEqualToString: @"Playlists"])
+            return [[[VLCMediaLibrary sharedMediaLibrary] playlists] count];
+        if([item isEqualToString: @"Services Discovery"])
+            return [[[VLCServicesDiscoverer sharedDiscoverer] services] count];
+    }
+    if ([item isKindOfClass: [VLCPlaylist class]])
+        return [[item playlists] count];
+
+    return 0;
+}
+
+- (id)outlineView:(NSOutlineView *)aOutlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
+{
+    if (!item)
+        return nil;
+    if( [[tableColumn identifier] isEqualToString:@"name"] )
+    {
+        if ( [item isKindOfClass: [NSString class]] )
+            return item;
+        if ( [item isKindOfClass: [VLCPlaylist class]])
+            return [[[item providerMedia] metaInformation] objectForKey:VLCMetaInformationTitle];
+        if ( [item isKindOfClass: [VLCMediaDiscoverer class]])
+            return [item localizedName];
+        if ( [item isKindOfClass: [VLCMediaLibrary class]])
+            return @"Library";
+    }
+    else if ( [item isKindOfClass: [NSString class]] && [[tableColumn identifier] isEqualToString:@"icon"])
+        return nil;
+
+    return nil;
+}
+@end
+
+@implementation VLCCategoryListDataSource (OutlineViewDelegating)
+- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item
+{
+    if ([item isKindOfClass: [NSString class]])
+    {
+        if([item isEqualToString: @"Library"])
+            return YES;
+        if([item isEqualToString: @"Services Discovery"])
+            return NO;
+        if([item isEqualToString: @"Playlists"])
+            return NO;
+    }
+    return YES;
+}
+- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
+{
+    if ([item isKindOfClass: [VLCMediaDiscoverer class]])
+        [cell setImage: [NSImage imageNamed:@"vlc_stream_16px"]];
+    else
+        [cell setImage: nil];
+}
+@end
diff --git a/extras/MacOSX/VLC_app/VLCCategoryOutlineView.h b/extras/MacOSX/VLC_app/VLCCategoryOutlineView.h
new file mode 100644 (file)
index 0000000..4fe40d2
--- /dev/null
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * VLCCategoryOutlineView.h: VLC.app custom outline view
+ *****************************************************************************
+ * Copyright (C) 2007 Pierre d'Herbemont
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+@interface VLCCategoryOutlineView : NSOutlineView
+{
+       BOOL    enableAnimation;
+       
+       NSMutableDictionary *allAnimatingItemsDict;
+       int animations;
+       NSSize animationHedgeFactor;
+       
+       BOOL disableExpansionAnimation;
+}
+@end
diff --git a/extras/MacOSX/VLC_app/VLCCategoryOutlineView.m b/extras/MacOSX/VLC_app/VLCCategoryOutlineView.m
new file mode 100644 (file)
index 0000000..660ab74
--- /dev/null
@@ -0,0 +1,72 @@
+/*****************************************************************************
+ * VLCCategoryOutlineView.h: VLC.app custom outline view
+ * Most of the code here from Colloquy (GPL v2)
+ *****************************************************************************
+ * Copyright (C) 2007 Colloquy team (no copyright on original file)
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "VLCCategoryOutlineView.h"
+
+/* Taken from colloquy (GPL v2) */
+static void gradientInterpolate( void *info, float const *inData, float *outData )
+{
+       static float light[4] = { 0.67843137, 0.73333333, 0.81568627, 1. };
+       static float dark[4] = { 0.59607843, 0.66666667, 0.76862745, 1. };
+       float a = inData[0];
+       int i = 0;
+
+       for( i = 0; i < 4; i++ )
+               outData[i] = ( 1. - a ) * dark[i] + a * light[i];
+}
+
+@implementation VLCCategoryOutlineView
+- (NSColor *) _highlightColorForCell:(NSCell *)aCell
+{
+    /* return nil to prevent normal selection drawing*/
+    return nil;
+}
+
+- (void) _highlightRow:(int) row clipRect:(NSRect) clipRect
+{
+       NSRect highlight = [self rectOfRow:row];
+
+       struct CGFunctionCallbacks callbacks = { 0, gradientInterpolate, NULL };
+       CGFunctionRef function = CGFunctionCreate( NULL, 1, NULL, 4, NULL, &callbacks );
+       CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB();
+
+       CGShadingRef shading = CGShadingCreateAxial( cspace, CGPointMake( NSMinX( highlight ), NSMaxY( highlight ) ), CGPointMake( NSMinX( highlight ), NSMinY( highlight ) ), function, false, false );
+       CGContextDrawShading( [[NSGraphicsContext currentContext] graphicsPort], shading );
+
+       CGShadingRelease( shading );
+       CGColorSpaceRelease( cspace );
+       CGFunctionRelease( function );
+
+       static NSColor *rowBottomLine = nil;
+       if( ! rowBottomLine )
+               rowBottomLine = [[NSColor colorWithCalibratedRed:( 140. / 255. ) green:( 152. / 255. ) blue:( 176. / 255. ) alpha:1.] retain];
+
+       [rowBottomLine set];
+
+       NSRect bottomLine = NSMakeRect( NSMinX( highlight ), NSMaxY( highlight ) - 1., NSWidth( highlight ), 1. );
+       NSRectFill( bottomLine );
+}
+
+@end
diff --git a/extras/MacOSX/VLC_app/VLCController.h b/extras/MacOSX/VLC_app/VLCController.h
new file mode 100644 (file)
index 0000000..e0e72f8
--- /dev/null
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * VLCController.h: VLC.app main controller
+ *****************************************************************************
+ * Copyright (C) 2007 Pierre d'Herbemont
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+#define VLCPanic( ex ) __VLCPanic( ex, __FUNCTION__, __FILE__, __LINE__ )
+static inline void __VLCPanic( const char * str, const char * function, const char * file, int line_number )
+{
+    NSRunCriticalAlertPanel( @"Error", [NSString stringWithFormat:@"The following error was encountered: %s (%s:%d %s)", str, file, line_number, function], @"Quit", nil, nil );
+    exit( -1 );
+}
+
+@interface VLCController : NSObject
+{
+    IBOutlet id categoryList;
+    IBOutlet id detailList;
+    IBOutlet id videoView;
+    IBOutlet id detailSearchField;
+}
+@end
diff --git a/extras/MacOSX/VLC_app/VLCController.m b/extras/MacOSX/VLC_app/VLCController.m
new file mode 100644 (file)
index 0000000..e5f96cd
--- /dev/null
@@ -0,0 +1,110 @@
+/*****************************************************************************
+ * VLCController.h: VLC.app main controller
+ *****************************************************************************
+ * Copyright (C) 2007 Pierre d'Herbemont
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Pierre d'Herbemont <pdherbemont # videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+/* this code needs rework, but it does nice thing */
+
+#import <VLC/VLC.h>
+#import "VLCController.h"
+#import "VLCCategoryCell.h"
+NSArrayController * treeController;
+VLCPlaylist * currentPlaylist;
+@implementation VLCController
+- (void)awakeFromNib
+{
+    [NSApp setDelegate:self];
+    [detailList setTarget:self];
+    [detailList setDoubleAction:@selector(detailListItemDoubleClicked:)];
+
+    [detailList setDataSource: [[VLCPlaylistDataSource alloc] initWithPlaylist:nil videoView:videoView]];
+    [detailList registerForDraggedTypes: [NSArray arrayWithObjects:NSFilenamesPboardType, NSURLPboardType, nil]];
+
+    [categoryList setTarget:self];
+    [categoryList setAction:@selector(categoryListItemClicked:)];
+    [[[categoryList tableColumns] objectAtIndex:0] setDataCell:[[[VLCCategoryCell alloc] init] autorelease]];
+}
+
+- (void)detailListItemDoubleClicked:(id)sender
+{
+    if( [sender isKindOfClass:[NSTableView class]] && [sender selectedRow] >= 0)
+    {
+        [videoView setPlaylist: currentPlaylist];
+        [videoView playMedia: [[treeController selectedObjects] objectAtIndex: 0]];
+    }
+
+}
+
+- (void)categoryListItemClicked:(id)sender
+{
+    VLCPlaylist * aPlaylist;
+    id selectedItem = [sender itemAtRow:[sender selectedRow]];
+
+    if([selectedItem isKindOfClass:[VLCMediaLibrary class]])
+        aPlaylist = [selectedItem allMedia];
+    else if([selectedItem isKindOfClass:[VLCMediaDiscoverer class]])
+        aPlaylist = [selectedItem playlist];
+    else if([selectedItem isKindOfClass:[VLCPlaylist class]])
+        aPlaylist = [selectedItem flatPlaylist];
+    else
+    {
+        return;
+    }
+    currentPlaylist= aPlaylist;
+    treeController = [[NSArrayController alloc] init]; /* XXX: We leak */
+    
+    //[treeController setAutomaticallyPreparesContent: YES];
+    [[detailList dataSource] release];
+    NSLog(@"currentPlaylist %@", currentPlaylist);
+    [detailList setDataSource: [[VLCPlaylistDataSource alloc] initWithPlaylist:aPlaylist videoView:videoView]];
+    //[treeController setContent: [[VLCMediaLibrary sharedMediaLibrary] allMedia]];
+    [treeController bind:@"contentArray" toObject: aPlaylist
+                    withKeyPath:@"items" options:nil];
+       NSTableColumn *tableColumn;
+    NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary];
+
+    [bindingOptions setObject:@"metaInformation.title contains[c] $value" forKey:NSPredicateFormatBindingOption];
+    [bindingOptions setObject:@"No Title" forKey:NSDisplayNameBindingOption];
+
+    [detailSearchField bind:@"predicate" toObject: treeController
+                    withKeyPath:@"filterPredicate" options:bindingOptions];
+
+    //[treeController setChildrenKeyPath:@"subitems.items"];
+       
+    [bindingOptions removeAllObjects];
+       [bindingOptions setObject:@"Search" forKey:@"NSNullPlaceholder"];
+               
+       /* binding for "title" column */
+    tableColumn = [detailList tableColumnWithIdentifier:@"title"];
+       
+       [tableColumn bind:@"value" toObject: treeController
+                 withKeyPath:@"arrangedObjects.metaInformation.title" options:bindingOptions];
+
+}
+@end
+
+@implementation VLCController (NSAppDelegating)
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
+{
+    [self categoryListItemClicked: categoryList];
+}
+@end
diff --git a/extras/MacOSX/VLC_app/VLC_Prefix.pch b/extras/MacOSX/VLC_app/VLC_Prefix.pch
new file mode 100644 (file)
index 0000000..b625338
--- /dev/null
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the 'VLC' target in the 'VLC' project
+//
+
+#ifdef __OBJC__
+    #import <Cocoa/Cocoa.h>
+#endif
diff --git a/extras/MacOSX/VLC_app/main.m b/extras/MacOSX/VLC_app/main.m
new file mode 100644 (file)
index 0000000..781edef
--- /dev/null
@@ -0,0 +1,14 @@
+//
+//  main.m
+//  VLC
+//
+//  Created by Pierre d'Herbemont on 11/08/07.
+//  Copyright __MyCompanyName__ 2007. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+int main(int argc, char *argv[])
+{
+    return NSApplicationMain(argc,  (const char **) argv);
+}