Commit 9e4cdfd5 authored by Benjamin Pracht's avatar Benjamin Pracht

* Item Info panel works again from playlist context menu

parent d9bb7326
...@@ -74,5 +74,7 @@ ...@@ -74,5 +74,7 @@
- (void)appendArray:(NSArray*)o_array atPos:(int)i_position enqueue:(BOOL)b_enqueue; - (void)appendArray:(NSArray*)o_array atPos:(int)i_position enqueue:(BOOL)b_enqueue;
- (playlist_item_t *)selectedPlaylistItem;
@end @end
...@@ -593,6 +593,12 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/ ...@@ -593,6 +593,12 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
return( o_ctx_menu ); return( o_ctx_menu );
} }
- (playlist_item_t *)selectedPlaylistItem
{
return [[o_outline_view itemAtRow: [o_outline_view selectedRow]]
pointerValue];
}
@end @end
@implementation VLCPlaylist (NSOutlineViewDataSource) @implementation VLCPlaylist (NSOutlineViewDataSource)
......
...@@ -41,8 +41,7 @@ ...@@ -41,8 +41,7 @@
IBOutlet id o_btn_add_group; IBOutlet id o_btn_add_group;
IBOutlet id o_outline_view; IBOutlet id o_outline_view;
int i_item; playlist_item_t * p_item;
NSMutableArray * o_selected;
} }
- (IBAction)togglePlaylistInfoPanel:(id)sender; - (IBAction)togglePlaylistInfoPanel:(id)sender;
...@@ -50,7 +49,8 @@ ...@@ -50,7 +49,8 @@
- (void)initPanel:(id)sender; - (void)initPanel:(id)sender;
- (IBAction)infoCancel:(id)sender; - (IBAction)infoCancel:(id)sender;
- (IBAction)infoOk:(id)sender; - (IBAction)infoOk:(id)sender;
- (int)getItem; - (playlist_item_t *)getItem;
- (bool)isItemInPlaylist:(playlist_item_t *)p_item;
@end @end
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
NSString *o_name; NSString *o_name;
NSString *o_value; NSString *o_value;
int i_object_id; int i_object_id;
int i_item; playlist_item_t * p_item;
VLCInfoTreeItem *o_parent; VLCInfoTreeItem *o_parent;
NSMutableArray *o_children; NSMutableArray *o_children;
} }
......
...@@ -41,18 +41,11 @@ ...@@ -41,18 +41,11 @@
if( self != nil ) if( self != nil )
{ {
i_item = -1; p_item = NULL;
o_selected = NULL;
} }
return( self ); return( self );
} }
- (void)dealloc
{
[o_selected release];
[super dealloc];
}
- (void)awakeFromNib - (void)awakeFromNib
{ {
[o_info_window setExcludedFromWindowsMenu: TRUE]; [o_info_window setExcludedFromWindowsMenu: TRUE];
...@@ -73,9 +66,7 @@ ...@@ -73,9 +66,7 @@
} }
else else
{ {
i_item = [[[VLCMain sharedInstance] getPlaylist] selectedPlaylistItem]; p_item = [[[VLCMain sharedInstance] getPlaylist] selectedPlaylistItem];
o_selected = [[[VLCMain sharedInstance] getPlaylist] selectedPlaylistItemsList];
[o_selected retain];
[self initPanel:sender]; [self initPanel:sender];
} }
} }
...@@ -94,10 +85,7 @@ ...@@ -94,10 +85,7 @@
if (p_playlist) if (p_playlist)
{ {
i_item = p_playlist->i_index; p_item = p_playlist->status.p_item;
o_selected = [NSMutableArray arrayWithObject:
[NSNumber numberWithInt:i_item]];
[o_selected retain];
vlc_object_release(p_playlist); vlc_object_release(p_playlist);
} }
[self initPanel:sender]; [self initPanel:sender];
...@@ -106,43 +94,41 @@ ...@@ -106,43 +94,41 @@
- (void)initPanel:(id)sender - (void)initPanel:(id)sender
{ {
intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist;
p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( p_playlist )
{
char *psz_temp; char *psz_temp;
vlc_mutex_lock(&p_item->input.lock);
/*fill uri / title / author info */ /*fill uri / title / author info */
if (p_item->input.psz_uri)
{
[o_uri_txt setStringValue: [o_uri_txt setStringValue:
([NSString stringWithUTF8String:p_playlist-> ([NSString stringWithUTF8String:p_item->input.psz_uri] == nil ) ?
pp_items[i_item]->input.psz_uri] == nil ) ? [NSString stringWithCString:p_item->input.psz_uri] :
[NSString stringWithCString:p_playlist-> [NSString stringWithUTF8String:p_item->input.psz_uri]];
pp_items[i_item]->input.psz_uri] : }
[NSString stringWithUTF8String:p_playlist->
pp_items[i_item]->input.psz_uri]];
if (p_item->input.psz_name)
{
[o_title_txt setStringValue: [o_title_txt setStringValue:
([NSString stringWithUTF8String:p_playlist-> ([NSString stringWithUTF8String:p_item->input.psz_name] == nil ) ?
pp_items[i_item]->input.psz_name] == nil ) ? [NSString stringWithCString:p_item->input.psz_name] :
[NSString stringWithCString:p_playlist-> [NSString stringWithUTF8String:p_item->input.psz_name]];
pp_items[i_item]->input.psz_name] : }
[NSString stringWithUTF8String:p_playlist->
pp_items[i_item]->input.psz_name]]; psz_temp = playlist_ItemGetInfo( p_item ,_("General"),_("Author") );
psz_temp = playlist_GetInfo( p_playlist, i_item ,_("General"),_("Author") ); if (psz_temp)
{
[o_author_txt setStringValue: [NSString stringWithUTF8String: psz_temp]]; [o_author_txt setStringValue: [NSString stringWithUTF8String: psz_temp]];
}
free( psz_temp ); free( psz_temp );
vlc_mutex_unlock(&p_item->input.lock);
[[VLCInfoTreeItem rootItem] refresh]; [[VLCInfoTreeItem rootItem] refresh];
[o_outline_view reloadData]; [o_outline_view reloadData];
vlc_object_release( p_playlist );
}
[o_info_window makeKeyAndOrderFront: sender]; [o_info_window makeKeyAndOrderFront: sender];
} }
...@@ -154,34 +140,54 @@ ...@@ -154,34 +140,54 @@
- (IBAction)infoOk:(id)sender - (IBAction)infoOk:(id)sender
{ {
int c;
intf_thread_t * p_intf = VLCIntf; intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE ); FIND_ANYWHERE );
vlc_value_t val; vlc_value_t val;
if (p_playlist) if ([self isItemInPlaylist: p_item])
{ {
vlc_mutex_lock(&p_playlist->pp_items[i_item]->input.lock); vlc_mutex_lock(&p_item->input.lock);
p_playlist->pp_items[i_item]->input.psz_uri = p_item->input.psz_uri = strdup([[o_uri_txt stringValue] cString]);
strdup([[o_uri_txt stringValue] cString]); p_item->input.psz_name = strdup([[o_title_txt stringValue] cString]);
p_playlist->pp_items[i_item]->input.psz_name = playlist_ItemAddInfo(p_item,_("General"),_("Author"), [[o_author_txt stringValue] cString]);
strdup([[o_title_txt stringValue] cString]);
playlist_ItemAddInfo(p_playlist->pp_items[i_item],_("General"),_("Author"), [[o_author_txt stringValue] cString]);
c = (int)[o_selected count]; vlc_mutex_unlock(&p_item->input.lock);
vlc_mutex_unlock(&p_playlist->pp_items[i_item]->input.lock);
val.b_bool = VLC_TRUE; val.b_bool = VLC_TRUE;
var_Set( p_playlist,"intf-change",val ); var_Set( p_playlist,"intf-change",val );
vlc_object_release ( p_playlist );
} }
[o_info_window orderOut: self]; [o_info_window orderOut: self];
} }
- (int)getItem - (playlist_item_t *)getItem
{ {
return i_item; return p_item;
}
- (bool)isItemInPlaylist:(playlist_item_t *)p_local_item
{
intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
int i;
if (p_playlist == NULL)
{
return NO;
}
for (i = 0 ; i < p_playlist->i_size ; i++)
{
if (p_playlist->pp_items[i] == p_local_item)
{
vlc_object_release(p_playlist);
return YES;
}
}
vlc_object_release(p_playlist);
return NO;
} }
@end @end
...@@ -257,7 +263,7 @@ static VLCInfoTreeItem *o_root_item = nil; ...@@ -257,7 +263,7 @@ static VLCInfoTreeItem *o_root_item = nil;
o_value = [o_item_value copy]; o_value = [o_item_value copy];
i_object_id = i_id; i_object_id = i_id;
o_parent = o_parent_item; o_parent = o_parent_item;
i_item = [[[VLCMain sharedInstance] getInfo] getItem]; p_item = [[[VLCMain sharedInstance] getInfo] getItem];
} }
return( self ); return( self );
} }
...@@ -280,57 +286,51 @@ static VLCInfoTreeItem *o_root_item = nil; ...@@ -280,57 +286,51 @@ static VLCInfoTreeItem *o_root_item = nil;
{ {
if (o_children == NULL) if (o_children == NULL)
{ {
intf_thread_t * p_intf = VLCIntf;
playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
int i; int i;
if (p_playlist) if ([[[VLCMain sharedInstance] getInfo] isItemInPlaylist: p_item])
{
if (i_item > -1)
{ {
if (self == o_root_item) if (self == o_root_item)
{ {
o_children = [[NSMutableArray alloc] initWithCapacity:p_playlist->pp_items[i_item]->input.i_categories]; vlc_mutex_lock(&p_item->input.lock);
for (i = 0 ; i<p_playlist->pp_items[i_item]->input.i_categories ; i++) o_children = [[NSMutableArray alloc] initWithCapacity:
p_item->input.i_categories];
for (i = 0 ; i<p_item->input.i_categories ; i++)
{ {
[o_children addObject:[[VLCInfoTreeItem alloc] [o_children addObject:[[VLCInfoTreeItem alloc]
initWithName: [NSString stringWithUTF8String: initWithName: [NSString stringWithUTF8String:
p_playlist->pp_items[i_item]->input. p_item->input.pp_categories[i]->psz_name]
pp_categories[i]->psz_name]
value: @"" value: @""
ID: i ID: i
parent: self]]; parent: self]];
} }
vlc_mutex_unlock(&p_item->input.lock);
} }
else if (o_parent == o_root_item) else if (o_parent == o_root_item)
{ {
vlc_mutex_lock(&p_item->input.lock);
o_children = [[NSMutableArray alloc] initWithCapacity: o_children = [[NSMutableArray alloc] initWithCapacity:
p_playlist->pp_items[i_item]->input. p_item->input.pp_categories[i_object_id]->i_infos];
pp_categories[i_object_id]->i_infos]; for (i = 0 ; i<p_item->input.pp_categories[i_object_id]
for (i = 0 ; i<p_playlist->pp_items[i_item]->input. ->i_infos ; i++)
pp_categories[i_object_id]->i_infos ; i++)
{ {
[o_children addObject:[[VLCInfoTreeItem alloc] [o_children addObject:[[VLCInfoTreeItem alloc]
initWithName: [NSString stringWithUTF8String: initWithName: [NSString stringWithUTF8String:
p_playlist->pp_items[i_item]->input. p_item->input.pp_categories[i_object_id]->
pp_categories[i_object_id]->
pp_infos[i]->psz_name] pp_infos[i]->psz_name]
value: [NSString stringWithUTF8String: value: [NSString stringWithUTF8String:
p_playlist->pp_items[i_item]->input. p_item->input.pp_categories[i_object_id]->
pp_categories[i_object_id]->
pp_infos[i]->psz_value] pp_infos[i]->psz_value]
ID: i ID: i
parent: self]]; parent: self]];
} }
vlc_mutex_unlock(&p_item->input.lock);
} }
else else
{ {
o_children = IsALeafNode; o_children = IsALeafNode;
} }
} }
vlc_object_release(p_playlist);
}
} }
return o_children; return o_children;
} }
...@@ -361,7 +361,7 @@ static VLCInfoTreeItem *o_root_item = nil; ...@@ -361,7 +361,7 @@ static VLCInfoTreeItem *o_root_item = nil;
*/ */
- (void)refresh - (void)refresh
{ {
i_item = [[[VLCMain sharedInstance] getInfo] getItem]; p_item = [[[VLCMain sharedInstance] getInfo] getItem];
if (o_children != NULL) if (o_children != NULL)
{ {
[o_children release]; [o_children release];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment