vlc | branch: master | David Fuhrmann <[email protected]> | Sat Mar 7 11:05:46 2015 +0100| [697314665b2c6507bed737159c0f07c2fff6890e] | committer: David Fuhrmann
macosx: select currently played item And expand outline view tree if necessary. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=697314665b2c6507bed737159c0f07c2fff6890e --- modules/gui/macosx/PLModel.h | 2 ++ modules/gui/macosx/PLModel.m | 12 ++++++++ modules/gui/macosx/intf.m | 3 +- modules/gui/macosx/playlist.h | 3 +- modules/gui/macosx/playlist.m | 62 +++++++++++++++++++---------------------- 5 files changed, 46 insertions(+), 36 deletions(-) diff --git a/modules/gui/macosx/PLModel.h b/modules/gui/macosx/PLModel.h index 01a1bd3..d6584ae 100644 --- a/modules/gui/macosx/PLModel.h +++ b/modules/gui/macosx/PLModel.h @@ -80,6 +80,8 @@ typedef enum { - (void)addItem:(int)i_item withParentNode:(int)i_node; - (void)removeItem:(int)i_item; +- (PLItem *)currentlyPlayingItem; + - (void)sortForColumn:(NSString *)o_column withMode:(int)i_mode; - (void)searchUpdate:(NSString *)o_search; diff --git a/modules/gui/macosx/PLModel.m b/modules/gui/macosx/PLModel.m index 27bce4b..3aec7d8 100644 --- a/modules/gui/macosx/PLModel.m +++ b/modules/gui/macosx/PLModel.m @@ -199,6 +199,18 @@ [_outlineView reloadItem:o_parent reloadChildren:YES]; } +- (PLItem *)currentlyPlayingItem +{ + PLItem *item = nil; + + PL_LOCK; + playlist_item_t *p_current = playlist_CurrentPlayingItem(p_playlist); + if (p_current) + item = [self findItemByPlaylistId:p_current->i_id]; + PL_UNLOCK; + return item; +} + - (void)sortForColumn:(NSString *)o_column withMode:(int)i_mode { int i_column = 0; diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index 2df03a8..70a51e5 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -1356,6 +1356,8 @@ static bool f_appExit = false; p_input_changed = vlc_object_hold(p_current_input); + [[self playlist] currentlyPlayingItemChanged]; + [[self playlist] continuePlaybackWhereYouLeftOff:p_current_input]; [[NSNotificationCenter defaultCenter] postNotificationName:VLCInputChangedNotification @@ -1363,7 +1365,6 @@ static bool f_appExit = false; } } - [o_playlist updateRowSelection]; [o_mainwindow updateWindow]; [self updateDelays]; [self updateMainMenu]; diff --git a/modules/gui/macosx/playlist.h b/modules/gui/macosx/playlist.h index 29d1a26..1eb3d44 100644 --- a/modules/gui/macosx/playlist.h +++ b/modules/gui/macosx/playlist.h @@ -91,7 +91,8 @@ - (void)playlistUpdated; - (void)outlineViewSelectionDidChange:(NSNotification *)notification; - (void)sortNode:(int)i_mode; -- (void)updateRowSelection; + +- (void)currentlyPlayingItemChanged; - (BOOL)isSelectionEmpty; diff --git a/modules/gui/macosx/playlist.m b/modules/gui/macosx/playlist.m index 63069e0..2de60b7 100644 --- a/modules/gui/macosx/playlist.m +++ b/modules/gui/macosx/playlist.m @@ -354,42 +354,36 @@ return [o_outline_view selectedRow] == -1; } -- (void)updateRowSelection +- (void)currentlyPlayingItemChanged { - // FIXME: unsafe - playlist_t *p_playlist = pl_Get(VLCIntf); - playlist_item_t *p_item, *p_temp_item; - NSMutableArray *o_array = [NSMutableArray array]; + PLItem *item = [[self model] currentlyPlayingItem]; + if (!item) + return; - // TODO Rework -// PL_LOCK; -// p_item = playlist_CurrentPlayingItem(p_playlist); -// if (p_item == NULL) { -// PL_UNLOCK; -// return; -// } -// -// p_temp_item = p_item; -// while(p_temp_item->p_parent) { -// [o_array insertObject: [NSValue valueWithPointer: p_temp_item] atIndex: 0]; -// p_temp_item = p_temp_item->p_parent; -// } -// PL_UNLOCK; -// -// NSUInteger count = [o_array count]; -// for (NSUInteger j = 0; j < count - 1; j++) { -// id o_item; -// if ((o_item = [o_outline_dict objectForKey: -// [NSString stringWithFormat: @"%p", -// [[o_array objectAtIndex:j] pointerValue]]]) != nil) { -// [o_outline_view expandItem: o_item]; -// } -// } -// -// id o_item = [o_outline_dict objectForKey:[NSString stringWithFormat: @"%p", p_item]]; -// NSInteger i_index = [o_outline_view rowForItem:o_item]; -// [o_outline_view selectRowIndexes:[NSIndexSet indexSetWithIndex:i_index] byExtendingSelection:NO]; -// [o_outline_view setNeedsDisplay:YES]; + [[[VLCMain sharedInstance] info] updatePanelWithItem: [item input]]; + + // select item + NSInteger itemIndex = [o_outline_view rowForItem:item]; + if (itemIndex < 0) { + // expand if needed + while (item != nil) { + PLItem *parent = [item parent]; + + if (![o_outline_view isExpandable: parent]) + break; + if (![o_outline_view isItemExpanded: parent]) + [o_outline_view expandItem: parent]; + item = parent; + } + + // search for row again + itemIndex = [o_outline_view rowForItem:item]; + if (itemIndex < 0) { + return; + } + } + + [o_outline_view selectRowIndexes: [NSIndexSet indexSetWithIndex: itemIndex] byExtendingSelection: NO]; } - (IBAction)savePlaylist:(id)sender _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
