1
mirror of https://code.videolan.org/videolan/vlc synced 2024-09-08 11:26:59 +02:00

Implements info treeview in the playlist proprieties window

This commit is contained in:
Benjamin Pracht 2004-03-30 19:38:46 +00:00
parent 36af0dc742
commit ef5210f891
5 changed files with 192 additions and 13 deletions

View File

@ -375,6 +375,7 @@
"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;

View 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>

View 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;
@ -47,3 +46,23 @@
- (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

View 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];
}
@ -104,12 +102,173 @@
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