- (void)playlistUpdated
{
- /* Clear indications of any existing column sorting */
- NSUInteger count = [[o_outline_view tableColumns] count];
- for (NSUInteger i = 0 ; i < count ; i++)
- [o_outline_view setIndicatorImage:nil inTableColumn: [[o_outline_view tableColumns] objectAtIndex:i]];
-
- [o_outline_view setHighlightedTableColumn:nil];
- o_tc_sortColumn = nil;
-
[o_outline_view reloadData];
- [[[[VLCMain sharedInstance] wizard] playlistWizard] reloadOutlineView];
-
- [o_outline_view selectRowIndexes:[NSIndexSet indexSetWithIndex:retainedRowSelection] byExtendingSelection:NO];
-
- [self outlineViewSelectionDidChange: nil];
- [[VLCMain sharedInstance] updateMainWindow];
}
- (void)outlineViewSelectionDidChange:(NSNotification *)notification
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];
+ // 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
[[[VLCMain sharedInstance] info] initPanel];
}
+- (void)deletionCompleted
+{
+ // retain selection before deletion
+ [o_outline_view selectRowIndexes:[NSIndexSet indexSetWithIndex:retainedRowSelection] byExtendingSelection:NO];
+}
+
- (IBAction)deleteItem:(id)sender
{
- int i_count;
- NSIndexSet *o_selected_indexes;
- intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Get(p_intf);
+ playlist_t * p_playlist = pl_Get(VLCIntf);
// check if deletion is allowed
if (![[self model] editAllowed])
return;
- o_selected_indexes = [o_outline_view selectedRowIndexes];
- i_count = [o_selected_indexes count];
+ NSIndexSet *o_selected_indexes = [o_outline_view selectedRowIndexes];
retainedRowSelection = [o_selected_indexes firstIndex];
if (retainedRowSelection == NSNotFound)
retainedRowSelection = 0;
+ [o_selected_indexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
+ PLItem *o_item = [o_outline_view itemAtRow: idx];
+ if (!o_item)
+ return;
- NSUInteger indexes[i_count];
-// if (i_count == [o_outline_view numberOfRows]) {
-// PL_LOCK;
-// playlist_NodeDelete(p_playlist, [self currentPlaylistRoot], true, false);
-// PL_UNLOCK;
-// [self playlistUpdated];
-// return;
-// }
- [o_selected_indexes getIndexes:indexes maxCount:i_count inIndexRange:nil];
- for (int i = 0; i < i_count; i++) {
- PLItem *o_item = [o_outline_view itemAtRow: indexes[i]];
- [o_outline_view deselectRow: indexes[i]];
-
- /// TODO
-// if (p_item->i_children != -1) {
-// //is a node and not an item
-// if (playlist_Status(p_playlist) != PLAYLIST_STOPPED &&
-// [self isItem: playlist_CurrentPlayingItem(p_playlist) inNode: ((playlist_item_t *)[o_item pointerValue])
-// checkItemExistence: NO locked:YES] == YES)
-// // if current item is in selected node and is playing then stop playlist
-// playlist_Control(p_playlist, PLAYLIST_STOP, pl_Locked);
-//
-// playlist_NodeDelete(p_playlist, p_item, true, false);
-// } else
-
- playlist_DeleteFromInput(p_playlist, [o_item input], pl_Unlocked);
-// [[o_item parent] deleteChild:o_item];
-//
-// [o_outline_view reloadData];
- }
-
-// [self playlistUpdated];
+ // model deletion is done via callback
+ playlist_DeleteFromInput(p_playlist, [o_item input], pl_Unlocked);
+ }];
}
- (IBAction)sortNodeByName:(id)sender
/* allow the user to over-write the start/stop/run-time */
if (var_GetFloat(p_input_thread, "run-time") > 0 ||
var_GetFloat(p_input_thread, "start-time") > 0 ||
- var_GetFloat(p_input_thread, "stop-time") > 0) {
+ var_GetFloat(p_input_thread, "stop-time") != 0) {
return;
}