X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fmacosx%2Fplaylistinfo.m;h=c0dfa25714ee615bbf6e909174873483ae1466c3;hb=7cf99d81d8213730b7919f626d162f94b7153127;hp=11d8b144aeddde844f53d0c9d8ac6c27f3a66c1f;hpb=fcc30d464b150e5d01a8028a9edc5af66b81b630;p=vlc diff --git a/modules/gui/macosx/playlistinfo.m b/modules/gui/macosx/playlistinfo.m index 11d8b144ae..c0dfa25714 100644 --- a/modules/gui/macosx/playlistinfo.m +++ b/modules/gui/macosx/playlistinfo.m @@ -54,6 +54,8 @@ static VLCInfo *_o_sharedInstance = nil; { p_item = NULL; o_statUpdateTimer = nil; + [self updatePanelWithItem: NULL]; + rootItem = [[VLCInfoTreeItem alloc] init]; } } @@ -110,39 +112,78 @@ static VLCInfo *_o_sharedInstance = nil; [o_lost_abuffers_lbl setStringValue: _NS("Lost buffers")]; [o_info_window setInitialFirstResponder: o_uri_txt]; + [o_info_window setDelegate: self]; + + /* We may be awoken from nib way after initialiwation + * Update ourselves */ + [self updatePanelWithItem:p_item]; +} + +- (void)stop +{ + /* make sure that the timer is released in any case */ + if( o_statUpdateTimer && [o_statUpdateTimer isValid] ) + [o_statUpdateTimer invalidate]; + + [rootItem release]; + + [o_statUpdateTimer release]; + o_statUpdateTimer = nil; } - (void)dealloc { /* make sure that the timer is released in any case */ - if( [o_statUpdateTimer isValid] ) + if( o_statUpdateTimer && [o_statUpdateTimer isValid] ) [o_statUpdateTimer invalidate]; - if ( o_statUpdateTimer ) - [o_statUpdateTimer release]; + [o_statUpdateTimer release]; + + if( p_item ) vlc_gc_decref( p_item ); [super dealloc]; } -- (void)initPanel +- (void)windowDidBecomeKey:(NSNotification *)notification { BOOL b_stats = config_GetInt(VLCIntf, "stats"); - [self initMediaPanelStats]; if( b_stats ) { + if( o_statUpdateTimer ) + { + [o_statUpdateTimer invalidate]; + [o_statUpdateTimer release]; + o_statUpdateTimer = nil; + } o_statUpdateTimer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(updateStatistics:) userInfo: nil repeats: YES]; [o_statUpdateTimer fire]; [o_statUpdateTimer retain]; } - else +} + +- (BOOL)windowShouldClose:(id)sender +{ + if( [o_statUpdateTimer isValid] ) + [o_statUpdateTimer invalidate]; + + if( o_statUpdateTimer ) + [o_statUpdateTimer release]; + o_statUpdateTimer = nil; + return YES; +} + +- (void)initPanel +{ + BOOL b_stats = config_GetInt(VLCIntf, "stats"); + if( !b_stats ) { if( [o_tab_view numberOfTabViewItems] > 2 ) [o_tab_view removeTabViewItem: [o_tab_view tabViewItemAtIndex: 2]]; } - [self updatePanel]; + [self initMediaPanelStats]; [o_info_window makeKeyAndOrderFront: self]; } @@ -172,61 +213,89 @@ static VLCInfo *_o_sharedInstance = nil; } -- (void)updatePanel +- (void)updatePanelWithItem:(input_item_t *)_p_item; { - /* make sure that we got the current item and not an outdated one */ - intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = pl_Yield( p_intf ); - - p_item = p_playlist->status.p_item; - vlc_object_release( p_playlist ); - - /* check whether our item is valid, because we would crash if not */ - if(! [self isItemInPlaylist: p_item] ) return; - - /* fill uri info */ - if( input_item_GetURI( p_item->p_input ) != NULL ) + if( _p_item != p_item ) { - [o_uri_txt setStringValue: [NSString stringWithUTF8String: input_item_GetURI( p_item->p_input ) ]]; + if( p_item ) vlc_gc_decref( p_item ); + if( _p_item ) vlc_gc_incref( _p_item ); + p_item = _p_item; } -#define SET( foo, bar ) \ - char *psz_##foo = input_item_Get##bar ( p_item->p_input ); \ - [self setMeta: psz_##foo forLabel: o_##foo##_txt]; \ - FREENULL( psz_##foo ); - - /* fill the other fields */ - SET( title, Title ); - SET( author, Artist ); - SET( collection, Album ); - SET( seqNum, TrackNum ); - SET( genre, Genre ); - SET( copyright, Copyright ); - SET( publisher, Publisher ); - SET( nowPlaying, NowPlaying ); - SET( language, Language ); - SET( date, Date ); - SET( description, Description ); - -#undef SET - - char *psz_meta; - NSImage *o_image; - psz_meta = input_item_GetArtURL( p_item->p_input ); - if( psz_meta && !strncmp( psz_meta, "file://", 7 ) ) - o_image = [[NSImage alloc] initWithContentsOfURL: [NSURL URLWithString: [NSString stringWithUTF8String: psz_meta]]]; + if( !p_item ) + { + /* Erase */ + #define SET( foo ) \ + [self setMeta: "" forLabel: o_##foo##_txt]; + SET( uri ); + SET( title ); + SET( author ); + SET( collection ); + SET( seqNum ); + SET( genre ); + SET( copyright ); + SET( publisher ); + SET( nowPlaying ); + SET( language ); + SET( date ); + SET( description ); + #undef SET + [o_image_well setImage: [NSImage imageNamed: @"noart.png"]]; + } else - o_image = [[NSImage imageNamed: @"noart.png"] retain]; - [o_image_well setImage: o_image]; - [o_image release]; - FREENULL( psz_meta ); + { + /* fill uri info */ + char * psz_url = input_item_GetURI( p_item ); + [o_uri_txt setStringValue: [NSString stringWithUTF8String: psz_url ? psz_url : "" ]]; + + if( !input_item_IsPreparsed( p_item ) ) + { + playlist_t * p_playlist = pl_Yield( VLCIntf ); + playlist_PreparseEnqueue( p_playlist, p_item ); + pl_Release( VLCIntf ); + } + + free( psz_url ); + + #define SET( foo, bar ) \ + char *psz_##foo = input_item_Get##bar ( p_item ); \ + [self setMeta: psz_##foo forLabel: o_##foo##_txt]; \ + FREENULL( psz_##foo ); + + /* fill the other fields */ + SET( title, Title ); + SET( author, Artist ); + SET( collection, Album ); + SET( seqNum, TrackNum ); + SET( genre, Genre ); + SET( copyright, Copyright ); + SET( publisher, Publisher ); + SET( nowPlaying, NowPlaying ); + SET( language, Language ); + SET( date, Date ); + SET( description, Description ); + + #undef SET + + char *psz_meta; + NSImage *o_image; + psz_meta = input_item_GetArtURL( p_item ); + if( psz_meta && !strncmp( psz_meta, "file://", 7 ) ) + o_image = [[NSImage alloc] initWithContentsOfURL: [NSURL URLWithString: [NSString stringWithUTF8String: psz_meta]]]; + else + o_image = [[NSImage imageNamed: @"noart.png"] retain]; + [o_image_well setImage: o_image]; + [o_image release]; + FREENULL( psz_meta ); + } /* reload the advanced table */ - [[VLCInfoTreeItem rootItem] refresh]; + [rootItem refresh]; [o_outline_view reloadData]; /* update the stats once to display p_item change faster */ [self updateStatistics: nil]; + } - (void)setMeta: (char *)psz_meta forLabel: (id)theItem @@ -239,42 +308,45 @@ static VLCInfo *_o_sharedInstance = nil; - (void)updateStatistics:(NSTimer*)theTimer { - if( [self isItemInPlaylist: p_item] ) + if( !p_item || !p_item->p_stats ) { - vlc_mutex_lock( &p_item->p_input->p_stats->lock ); - - /* input */ - [o_read_bytes_txt setStringValue: [NSString stringWithFormat: - @"%8.0f kB", (float)(p_item->p_input->p_stats->i_read_bytes)/1000]]; - [o_input_bitrate_txt setStringValue: [NSString stringWithFormat: - @"%6.0f kb/s", (float)(p_item->p_input->p_stats->f_input_bitrate)*8000]]; - [o_demux_bytes_txt setStringValue: [NSString stringWithFormat: - @"%8.0f kB", (float)(p_item->p_input->p_stats->i_demux_read_bytes)/1000]]; - [o_demux_bitrate_txt setStringValue: [NSString stringWithFormat: - @"%6.0f kb/s", (float)(p_item->p_input->p_stats->f_demux_bitrate)*8000]]; - - /* Video */ - [o_video_decoded_txt setIntValue: p_item->p_input->p_stats->i_decoded_video]; - [o_displayed_txt setIntValue: p_item->p_input->p_stats->i_displayed_pictures]; - [o_lost_frames_txt setIntValue: p_item->p_input->p_stats->i_lost_pictures]; - float f_fps = 0; - /* FIXME: input_Control( p_item->p_input, INPUT_GET_VIDEO_FPS, &f_fps ); */ - [o_fps_txt setFloatValue: f_fps]; - - /* Sout */ - [o_sent_packets_txt setIntValue: p_item->p_input->p_stats->i_sent_packets]; - [o_sent_bytes_txt setStringValue: [NSString stringWithFormat: @"%8.0f kB", - (float)(p_item->p_input->p_stats->i_sent_bytes)/1000]]; - [o_sent_bitrate_txt setStringValue: [NSString stringWithFormat: - @"%6.0f kb/s", (float)(p_item->p_input->p_stats->f_send_bitrate*8)*1000]]; - - /* Audio */ - [o_audio_decoded_txt setIntValue: p_item->p_input->p_stats->i_decoded_audio]; - [o_played_abuffers_txt setIntValue: p_item->p_input->p_stats->i_played_abuffers]; - [o_lost_abuffers_txt setIntValue: p_item->p_input->p_stats->i_lost_abuffers]; - - vlc_mutex_unlock( &p_item->p_input->p_stats->lock ); + [self initMediaPanelStats]; + return; } + + vlc_mutex_lock( &p_item->p_stats->lock ); + + /* input */ + [o_read_bytes_txt setStringValue: [NSString stringWithFormat: + @"%8.0f kB", (float)(p_item->p_stats->i_read_bytes)/1000]]; + [o_input_bitrate_txt setStringValue: [NSString stringWithFormat: + @"%6.0f kb/s", (float)(p_item->p_stats->f_input_bitrate)*8000]]; + [o_demux_bytes_txt setStringValue: [NSString stringWithFormat: + @"%8.0f kB", (float)(p_item->p_stats->i_demux_read_bytes)/1000]]; + [o_demux_bitrate_txt setStringValue: [NSString stringWithFormat: + @"%6.0f kb/s", (float)(p_item->p_stats->f_demux_bitrate)*8000]]; + + /* Video */ + [o_video_decoded_txt setIntValue: p_item->p_stats->i_decoded_video]; + [o_displayed_txt setIntValue: p_item->p_stats->i_displayed_pictures]; + [o_lost_frames_txt setIntValue: p_item->p_stats->i_lost_pictures]; + float f_fps = 0; + /* FIXME: input_Control( p_item, INPUT_GET_VIDEO_FPS, &f_fps ); */ + [o_fps_txt setFloatValue: f_fps]; + + /* Sout */ + [o_sent_packets_txt setIntValue: p_item->p_stats->i_sent_packets]; + [o_sent_bytes_txt setStringValue: [NSString stringWithFormat: @"%8.0f kB", + (float)(p_item->p_stats->i_sent_bytes)/1000]]; + [o_sent_bitrate_txt setStringValue: [NSString stringWithFormat: + @"%6.0f kb/s", (float)(p_item->p_stats->f_send_bitrate*8)*1000]]; + + /* Audio */ + [o_audio_decoded_txt setIntValue: p_item->p_stats->i_decoded_audio]; + [o_played_abuffers_txt setIntValue: p_item->p_stats->i_played_abuffers]; + [o_lost_abuffers_txt setIntValue: p_item->p_stats->i_lost_abuffers]; + + vlc_mutex_unlock( &p_item->p_stats->lock ); } - (IBAction)metaFieldChanged:(id)sender @@ -284,100 +356,72 @@ static VLCInfo *_o_sharedInstance = nil; - (IBAction)saveMetaData:(id)sender { - intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = pl_Yield( p_intf ); + playlist_t * p_playlist = pl_Yield( VLCIntf ); vlc_value_t val; - if( [self isItemInPlaylist: p_item] ) - { - meta_export_t p_export; - p_export.p_item = p_item->p_input; + if( !p_item ) goto error; - if( p_item->p_input == NULL ) - goto end; + meta_export_t p_export; + p_export.p_item = p_item; - /* we can write meta data only in a file */ - vlc_mutex_lock( &p_item->p_input->lock ); - int i_type = p_item->p_input->i_type; - vlc_mutex_unlock( &p_item->p_input->lock ); - if( i_type == ITEM_TYPE_FILE ) - { - char *psz_uri_orig = input_item_GetURI( p_item->p_input ); - char *psz_uri = psz_uri_orig; - if( !strncmp( psz_uri, "file://", 7 ) ) - psz_uri += 7; /* strlen("file://") = 7 */ - - p_export.psz_file = strndup( psz_uri, PATH_MAX ); - free( psz_uri_orig ); - } - else - goto end; - - #define utf8( o_blub ) \ - [[o_blub stringValue] UTF8String] - - input_item_SetName( p_item->p_input, utf8( o_title_txt ) ); - input_item_SetTitle( p_item->p_input, utf8( o_title_txt ) ); - input_item_SetArtist( p_item->p_input, utf8( o_author_txt ) ); - input_item_SetAlbum( p_item->p_input, utf8( o_collection_txt ) ); - input_item_SetGenre( p_item->p_input, utf8( o_genre_txt ) ); - input_item_SetTrackNum( p_item->p_input, utf8( o_seqNum_txt ) ); - input_item_SetDate( p_item->p_input, utf8( o_date_txt ) ); - input_item_SetCopyright( p_item->p_input, utf8( o_copyright_txt ) ); - input_item_SetPublisher( p_item->p_input, utf8( o_publisher_txt ) ); - input_item_SetDescription( p_item->p_input, utf8( o_description_txt ) ); - input_item_SetLanguage( p_item->p_input, utf8( o_language_txt ) ); - - PL_LOCK; - p_playlist->p_private = &p_export; - - module_t *p_mod = module_Need( p_playlist, "meta writer", NULL, 0 ); - if( p_mod ) - module_Unneed( p_playlist, p_mod ); - PL_UNLOCK; - - val.b_bool = true; - var_Set( p_playlist, "intf-change", val ); - [self updatePanel]; - } + /* we can write meta data only in a file */ + vlc_mutex_lock( &p_item->lock ); + int i_type = p_item->i_type; + vlc_mutex_unlock( &p_item->lock ); - end: - vlc_object_release( p_playlist ); - [o_saveMetaData_btn setEnabled: NO]; -} + if( i_type != ITEM_TYPE_FILE ) + goto error; -- (playlist_item_t *)getItem -{ - return p_item; -} + char *psz_uri_orig = input_item_GetURI( p_item ); + char *psz_uri = psz_uri_orig; + if( !strncmp( psz_uri, "file://", 7 ) ) + psz_uri += 7; /* strlen("file://") = 7 */ -- (BOOL)isItemInPlaylist:(playlist_item_t *)p_local_item -{ - intf_thread_t * p_intf = VLCIntf; - playlist_t * p_playlist = pl_Yield( p_intf ); - int i; + p_export.psz_file = strndup( psz_uri, PATH_MAX ); + free( psz_uri_orig ); - for( i = 0 ; i < p_playlist->all_items.i_size ; i++ ) - { - if( ARRAY_VAL( p_playlist->all_items, i ) == p_local_item ) - { - vlc_object_release( p_playlist ); - return YES; - } - } - vlc_object_release( p_playlist ); - return NO; -} + #define utf8( o_blub ) \ + [[o_blub stringValue] UTF8String] -- (BOOL)windowShouldClose:(id)sender -{ - if( [o_statUpdateTimer isValid] ) - [o_statUpdateTimer invalidate]; + input_item_SetName( p_item, utf8( o_title_txt ) ); + input_item_SetTitle( p_item, utf8( o_title_txt ) ); + input_item_SetArtist( p_item, utf8( o_author_txt ) ); + input_item_SetAlbum( p_item, utf8( o_collection_txt ) ); + input_item_SetGenre( p_item, utf8( o_genre_txt ) ); + input_item_SetTrackNum( p_item, utf8( o_seqNum_txt ) ); + input_item_SetDate( p_item, utf8( o_date_txt ) ); + input_item_SetCopyright( p_item, utf8( o_copyright_txt ) ); + input_item_SetPublisher( p_item, utf8( o_publisher_txt ) ); + input_item_SetDescription( p_item, utf8( o_description_txt ) ); + input_item_SetLanguage( p_item, utf8( o_language_txt ) ); - if( o_statUpdateTimer ) - [o_statUpdateTimer release]; + PL_LOCK; + p_playlist->p_private = &p_export; - return YES; + module_t *p_mod = module_Need( p_playlist, "meta writer", NULL, 0 ); + if( p_mod ) + module_Unneed( p_playlist, p_mod ); + PL_UNLOCK; + + val.b_bool = true; + var_Set( p_playlist, "intf-change", val ); + [self updatePanelWithItem: p_item]; + + pl_Release( VLCIntf ); + [o_saveMetaData_btn setEnabled: NO]; + return; + +error: + pl_Release( VLCIntf ); + NSRunAlertPanel(_NS("Error while saving meta"), + _NS("Impossible to save the meta data."), + _NS("OK"), nil, nil); +} + +- (input_item_t *)item +{ + vlc_gc_incref( p_item ); + return p_item; } @end @@ -388,20 +432,12 @@ static VLCInfo *_o_sharedInstance = nil; { BOOL bEnabled = TRUE; - intf_thread_t * p_intf = VLCIntf; - input_thread_t * p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT, - FIND_ANYWHERE ); - if( [[o_mi title] isEqualToString: _NS("Information")] ) { - if( p_input == NULL ) - { - bEnabled = FALSE; - } + return ![[[VLCMain sharedInstance] getPlaylist] isSelectionEmpty]; } - if( p_input ) vlc_object_release( p_input ); - return( bEnabled ); + return TRUE; } @end @@ -410,7 +446,7 @@ static VLCInfo *_o_sharedInstance = nil; - (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { - return (item == nil) ? [[VLCInfoTreeItem rootItem] numberOfChildren] : [item numberOfChildren]; + return (item == nil) ? [rootItem numberOfChildren] : [item numberOfChildren]; } - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item { @@ -419,18 +455,18 @@ static VLCInfo *_o_sharedInstance = nil; - (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item { - return (item == nil) ? [[VLCInfoTreeItem rootItem] childAtIndex:index] : (id)[item childAtIndex:index]; + return (item == nil) ? [rootItem childAtIndex:index] : (id)[item childAtIndex:index]; } - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { if ([[tableColumn identifier] isEqualToString:@"0"]) { - return (item == nil) ? @"" : (id)[item getName]; + return (item == nil) ? @"" : (id)[item name]; } else { - return (item == nil) ? @"" : (id)[item getValue]; + return (item == nil) ? @"" : (id)[item value]; } } @@ -439,11 +475,10 @@ static VLCInfo *_o_sharedInstance = nil; @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 +- (id)initWithName: (NSString *)o_item_name value: (NSString *)o_item_value ID: (int)i_id + parent:(VLCInfoTreeItem *)o_parent_item { self = [super init]; @@ -453,24 +488,23 @@ static VLCInfoTreeItem *o_root_item = nil; o_value = [o_item_value copy]; i_object_id = i_id; o_parent = o_parent_item; - if( [[VLCMain sharedInstance] getInfo] != nil ) - p_item = [[[VLCMain sharedInstance] getInfo] getItem]; - else - p_item = NULL; + p_item = [[[VLCMain sharedInstance] getInfo] item]; + o_children = nil; } 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; +- (id)init +{ + return [self initWithName:@"main" value:@"" ID:-1 parent:nil]; } - (void)dealloc { if( o_children != IsALeafNode ) [o_children release]; [o_name release]; + [o_value release]; + if( p_item ) vlc_gc_decref( p_item ); [super dealloc]; } @@ -478,77 +512,62 @@ static VLCInfoTreeItem *o_root_item = nil; * Loads children incrementally */ - (NSArray *)children { + if( !p_item ) return nil; + if (o_children == NULL) { int i; - if( [[[VLCMain sharedInstance] getInfo] isItemInPlaylist: p_item] ) + if( i_object_id == -1 ) { - if( self == o_root_item ) - { - vlc_mutex_lock( &p_item->p_input->lock ); - o_children = [[NSMutableArray alloc] initWithCapacity: - p_item->p_input->i_categories]; - for (i = 0 ; i < p_item->p_input->i_categories ; i++) - { - [o_children addObject:[[VLCInfoTreeItem alloc] - initWithName: [NSString stringWithUTF8String: - p_item->p_input->pp_categories[i]->psz_name] - value: @"" - ID: i - parent: self]]; - } - vlc_mutex_unlock( &p_item->p_input->lock ); - } - else if( o_parent == o_root_item ) + vlc_mutex_lock( &p_item->lock ); + o_children = [[NSMutableArray alloc] initWithCapacity: p_item->i_categories]; + for (i = 0 ; i < p_item->i_categories ; i++) { - vlc_mutex_lock( &p_item->p_input->lock ); - o_children = [[NSMutableArray alloc] initWithCapacity: - p_item->p_input->pp_categories[i_object_id]->i_infos]; - - for (i = 0 ; i < p_item->p_input->pp_categories[i_object_id]->i_infos ; i++) - { - [o_children addObject:[[VLCInfoTreeItem alloc] - initWithName: [NSString stringWithUTF8String: - p_item->p_input->pp_categories[i_object_id]->pp_infos[i]->psz_name] - value: [NSString stringWithUTF8String: - p_item->p_input->pp_categories[i_object_id]->pp_infos[i]->psz_value ? : ""] - ID: i - parent: self]]; - } - vlc_mutex_unlock( &p_item->p_input->lock ); + NSString * name = [NSString stringWithUTF8String: p_item->pp_categories[i]->psz_name]; + VLCInfoTreeItem * item = [[VLCInfoTreeItem alloc] initWithName:name value:@"" ID:i parent:self]; + [item autorelease]; + [o_children addObject:item]; } - else + vlc_mutex_unlock( &p_item->lock ); + } + else if( o_parent->i_object_id == -1 ) + { + vlc_mutex_lock( &p_item->lock ); + info_category_t * cat = p_item->pp_categories[i_object_id]; + o_children = [[NSMutableArray alloc] initWithCapacity: cat->i_infos]; + for (i = 0 ; i < cat->i_infos ; i++) { - o_children = IsALeafNode; + NSString * name = [NSString stringWithUTF8String: cat->pp_infos[i]->psz_name]; + NSString * value = [NSString stringWithUTF8String: cat->pp_infos[i]->psz_value ? : ""]; + VLCInfoTreeItem * item = [[VLCInfoTreeItem alloc] initWithName:name value:value ID:i parent:self]; + [item autorelease]; + [o_children addObject:item]; } + vlc_mutex_unlock( &p_item->lock ); + } + else + { + o_children = IsALeafNode; } } return o_children; } -- (NSString *)getName +- (NSString *)name { - return o_name; + return [[o_name retain] autorelease]; } -- (NSString *)getValue +- (NSString *)value { - 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]; + return [[o_value retain] autorelease]; } - (void)refresh { - p_item = [[[VLCMain sharedInstance] getInfo] getItem]; + if( p_item ) vlc_gc_decref( p_item ); + p_item = [[[VLCMain sharedInstance] getInfo] item]; if( o_children != NULL ) { [o_children release]; @@ -556,5 +575,15 @@ static VLCInfoTreeItem *o_root_item = nil; } } +- (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]; +} + @end