]> git.sesse.net Git - vlc/commitdiff
Implements info treeview in the playlist proprieties window
authorBenjamin Pracht <bigben@videolan.org>
Tue, 30 Mar 2004 19:38:46 +0000 (19:38 +0000)
committerBenjamin Pracht <bigben@videolan.org>
Tue, 30 Mar 2004 19:38:46 +0000 (19:38 +0000)
extras/MacOSX/Resources/English.lproj/MainMenu.nib/classes.nib
extras/MacOSX/Resources/English.lproj/MainMenu.nib/info.nib
extras/MacOSX/Resources/English.lproj/MainMenu.nib/objects.nib
modules/gui/macosx/playlistinfo.h
modules/gui/macosx/playlistinfo.m

index e78f2c26e24bab52a713dad872a183ac575afd70..accd75311383d65790d50b46e3edbe97cffc2060 100644 (file)
                 "o_btn_cancel" = id; 
                 "o_btn_ok" = id; 
                 "o_info_window" = id; 
+                "o_outline_view" = id; 
                 "o_title_lbl" = id; 
                 "o_title_txt" = id; 
                 "o_uri_lbl" = id; 
index 6b8f526d4ca96702ddc69293dbfcc6a43a236c89..b5e0e9248775dbb5d47be28d89be030cc8c46d1b 100644 (file)
@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>392 439 505 517 0 0 1280 1002 </string>
+       <string>486 129 505 517 0 0 1024 746 </string>
        <key>IBEditorPositions</key>
        <dict>
                <key>1617</key>
@@ -19,8 +19,8 @@
        <array/>
        <key>IBOpenObjects</key>
        <array>
-               <integer>1617</integer>
-               <integer>29</integer>
+               <integer>1789</integer>
+               <integer>21</integer>
        </array>
        <key>IBSystem Version</key>
        <string>7F44</string>
index 5ce227acbf17da7f69be4fd09926053aa125e50c..66ba9a6fa2f17fd15ba1c613ef973c1b175e558e 100644 (file)
Binary files a/extras/MacOSX/Resources/English.lproj/MainMenu.nib/objects.nib and b/extras/MacOSX/Resources/English.lproj/MainMenu.nib/objects.nib differ
index b0f402db39631690c7aeaf67e942ff268eb89b84..120436daa5b6d701b7d030c5c80e78a3b8e2ed1a 100644 (file)
@@ -37,9 +37,8 @@
     IBOutlet id o_author_txt;
     IBOutlet id o_btn_info_ok;
     IBOutlet id o_btn_info_cancel;
-    IBOutlet id o_tbv_info;
+    IBOutlet id o_outline_view;
     IBOutlet id o_vlc_playlist;
-    id o_otl_data;
 }
 
 - (IBAction)togglePlaylistInfoPanel:(id)sender;
 - (IBAction)infoOk:(id)sender;
 
 @end
+
+@interface VLCInfoTreeItem : NSObject
+{
+    NSString *o_name;
+    NSString *o_value;
+    int i_object_id;
+    int i_item;
+    VLCInfoTreeItem *o_parent;
+    NSMutableArray *o_children;
+}
+
++ (VLCInfoTreeItem *)rootItem;
+- (int)numberOfChildren;
+- (VLCInfoTreeItem *)childAtIndex:(int)i_index;
+- (NSString *)getName;
+- (NSString *)getValue;
+- (void)refresh;
+
+@end
+
index 88d66eee17f1b20462a00376992adfc0f786a25f..c586d4998c581c54857b33480ed9e30dd6696280 100644 (file)
@@ -39,8 +39,6 @@
 {
 
     [o_info_window setExcludedFromWindowsMenu: TRUE];
-    [o_tbv_info setOutlineTableColumn:0];
-    [o_tbv_info setDataSource: self];
 
     [o_info_window setTitle: _NS("Properties")];
     [o_uri_lbl setStringValue: _NS("URI")];
@@ -72,9 +70,9 @@
             [o_title_txt setStringValue:[NSString stringWithUTF8String: p_playlist->pp_items[i_item]->psz_name]];
             [o_author_txt setStringValue:[NSString stringWithUTF8String: playlist_GetInfo(p_playlist, i_item ,_("General"),_("Author") )]];
 
-            /*fill info outline*/
-//            [o_tbv_info 
-            vlc_object_release ( p_playlist );
+            [[VLCInfoTreeItem rootItem] refresh];
+            [o_outline_view reloadData];
+            vlc_object_release( p_playlist );
         }
         [o_info_window makeKeyAndOrderFront: sender];
     }
  
         vlc_mutex_unlock(&p_playlist->pp_items[i_item]->lock);
         val.b_bool = VLC_TRUE;
-        var_Set( p_playlist,"int-change",val );
+        var_Set( p_playlist,"intf-change",val );
         vlc_object_release ( p_playlist );
     } 
     [self togglePlaylistInfoPanel:self];
-    
-}   
+}
+
+
+@end
+
+@implementation VLCPlaylistInfo (NSTableDataSource)
+
+- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item  
+{
+    return (item == nil) ? [[VLCInfoTreeItem rootItem] numberOfChildren] : [item numberOfChildren];
+}
+
+- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
+    return ([item numberOfChildren] > 0);
+}
+
+- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item  
+{
+    return (item == nil) ? [[VLCInfoTreeItem rootItem] childAtIndex:index] : [item childAtIndex:index];
+}
+
+- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
+{
+    if ([[tableColumn identifier] isEqualToString:@"0"])
+    {
+        return (item == nil) ? @"" : (id)[item getName];
+    }
+    else
+    {
+        return (item == nil) ? @"" : (id)[item getValue];
+    }
+}
+
+@end
+
+@implementation VLCInfoTreeItem
+
+static VLCInfoTreeItem *o_root_item = nil;
+
+#define IsALeafNode ((id)-1)
+
+- (id)initWithName: (NSString *)o_item_name value: (NSString *)o_item_value ID: (int)i_id parent:(VLCInfoTreeItem *)o_parent_item
+{
+    self = [super init];
+    if( self != nil )
+    {
+
+        i_item = [[[NSApp delegate] getPlaylist] selectedPlaylistItem];
+        o_name = [o_item_name copy];
+        o_value = [o_item_value copy];
+        i_object_id = i_id;
+        o_parent = o_parent_item;
+    }
+    return( self );
+}
+
++ (VLCInfoTreeItem *)rootItem {
+    if (o_root_item == nil) o_root_item = [[VLCInfoTreeItem alloc] initWithName:@"main" value: @"" ID: 0 parent:nil];
+    return o_root_item;
+}
+
+- (void)dealloc
+{
+    if (o_children != IsALeafNode) [o_children release];
+    [o_name release];
+    [super dealloc];
+}
+
+/* Creates and returns the array of children
+ * Loads children incrementally */
+- (NSArray *)children
+{
+    if (o_children == NULL)
+    {
+        intf_thread_t * p_intf = [NSApp getIntf];
+        playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+                                          FIND_ANYWHERE );
+        int i;
+
+        if (p_playlist)
+        {
+            if (i_item > -1)
+            {
+                if (self == o_root_item)
+                {
+                    o_children = [[NSMutableArray alloc] initWithCapacity:p_playlist->pp_items[i_item]->i_categories];
+                    for (i = 0 ; i<p_playlist->pp_items[i_item]->i_categories ; i++)
+                    {
+                        [o_children addObject:[[VLCInfoTreeItem alloc] 
+                            initWithName: [NSString stringWithUTF8String:
+                                p_playlist->pp_items[i_item]->pp_categories[i]
+                                ->psz_name]
+                            value: @""
+                            ID: i 
+                            parent: self]];
+                    }
+                }
+                else if (o_parent == o_root_item)
+                {
+                    o_children = [[NSMutableArray alloc] initWithCapacity:
+                        p_playlist->pp_items[i_item]->
+                        pp_categories[i_object_id]->i_infos];
+                    for (i = 0 ; i<p_playlist->pp_items[i_item]->
+                           pp_categories[i_object_id]->i_infos ; i++)
+                    {
+                        [o_children addObject:[[VLCInfoTreeItem alloc]
+                        initWithName: [NSString stringWithUTF8String:
+                                p_playlist->pp_items[i_item]->
+                                pp_categories[i_object_id]->
+                                pp_infos[i]->psz_name]
+                            value: [NSString stringWithUTF8String:
+                                p_playlist->pp_items[i_item]->
+                                pp_categories[i_object_id]->
+                                pp_infos[i]->psz_value]
+                            ID: i
+                            parent: self]];
+                    }
+                }
+                else
+                {
+                    o_children = IsALeafNode;
+                }
+            }
+            vlc_object_release(p_playlist);
+        }
+    }
+    return o_children;
+}
+
+- (NSString *)getName
+{
+    return o_name;
+}
+
+- (NSString *)getValue
+{
+    return o_value;
+}
+
+- (VLCInfoTreeItem *)childAtIndex:(int)i_index {
+    return [[self children] objectAtIndex:i_index];
+}
+
+- (int)numberOfChildren {
+    id i_tmp = [self children];
+    return (i_tmp == IsALeafNode) ? (-1) : (int)[i_tmp count];
+}
+
+- (int)selectedPlaylistItem
+{
+    return i_item; 
+}
+
+- (void)refresh
+{
+    if (o_children != NULL)
+    {
+        [o_children release];
+        o_children = NULL;
+    }
+    i_item = [[[NSApp delegate] getPlaylist] selectedPlaylistItem];
+}
 
 @end