[vlc-commits] macosx: Use core-provided playlist search functionality

David Fuhrmann git at videolan.org
Tue Dec 30 16:11:59 CET 2014


vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sun Nov 30 11:21:54 2014 +0100| [42d2a27abfbff26731672799a822ea7f896b77ce] | committer: David Fuhrmann

macosx: Use core-provided playlist search functionality

This removes the old own-made search functionality and replaces
it by a version the user would expect (i.e. actually hiding non-
found entries).

close #6049

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=42d2a27abfbff26731672799a822ea7f896b77ce
---

 modules/gui/macosx/PLModel.h  |    3 +-
 modules/gui/macosx/PLModel.m  |   29 ++++++++++---
 modules/gui/macosx/playlist.h |    1 -
 modules/gui/macosx/playlist.m |   92 +----------------------------------------
 4 files changed, 26 insertions(+), 99 deletions(-)

diff --git a/modules/gui/macosx/PLModel.h b/modules/gui/macosx/PLModel.h
index 3a1b36c..8239f59 100644
--- a/modules/gui/macosx/PLModel.h
+++ b/modules/gui/macosx/PLModel.h
@@ -56,8 +56,7 @@ typedef enum {
 
 - (void)sortForColumn:(NSString *)o_column withMode:(int)i_mode;
 
-
-
+- (void)searchUpdate:(NSString *)o_search;
 
 
 @end
diff --git a/modules/gui/macosx/PLModel.m b/modules/gui/macosx/PLModel.m
index a9222d2..0aa3177 100644
--- a/modules/gui/macosx/PLModel.m
+++ b/modules/gui/macosx/PLModel.m
@@ -94,18 +94,22 @@
     [self currentRootType] == ROOT_TYPE_PLAYLIST;
 }
 
-
-
 - (void)rebuildPLItem:(PLItem *)o_item
 {
     [o_item clear];
     playlist_item_t *p_item = playlist_ItemGetById(p_playlist, [o_item plItemId]);
     if (p_item) {
+        int currPos = 0;
         for(int i = 0; i < p_item->i_children; ++i) {
-            PLItem *o_child = [[[PLItem alloc] initWithPlaylistItem:p_item->pp_children[i] parent:o_item] autorelease];
-            [o_item addChild:o_child atPos:i];
+            playlist_item_t *p_child = p_item->pp_children[i];
+
+            if (p_child->i_flags & PLAYLIST_DBL_FLAG)
+                continue;
+
+            PLItem *o_child = [[[PLItem alloc] initWithPlaylistItem:p_child parent:o_item] autorelease];
+            [o_item addChild:o_child atPos:currPos++];
 
-            if (p_item->pp_children[i]->i_children >= 0) {
+            if (p_child->i_children >= 0) {
                 [self rebuildPLItem:o_child];
             }
 
@@ -230,6 +234,21 @@
     PL_UNLOCK;
 }
 
+- (void)searchUpdate:(NSString *)o_search
+{
+    PL_LOCK;
+    playlist_item_t *p_root = playlist_ItemGetById(p_playlist, [_rootItem plItemId]);
+    if (!p_root) {
+        PL_UNLOCK;
+        return;
+    }
+    playlist_LiveSearchUpdate(p_playlist, p_root, [o_search UTF8String],
+                              true);
+    [self rebuildPLItem:_rootItem];
+    [_outlineView reloadData];
+    PL_UNLOCK;
+}
+
 @end
 
 #pragma mark -
diff --git a/modules/gui/macosx/playlist.h b/modules/gui/macosx/playlist.h
index c6f8332..f79f7b2 100644
--- a/modules/gui/macosx/playlist.h
+++ b/modules/gui/macosx/playlist.h
@@ -101,7 +101,6 @@
 - (playlist_item_t *)currentPlaylistRoot;
 - (void)reloadStyles;
 
-- (void)searchfieldChanged:(NSNotification *)o_notification;
 - (NSMenu *)menuForEvent:(NSEvent *)o_event;
 
 - (IBAction)searchItem:(id)sender;
diff --git a/modules/gui/macosx/playlist.m b/modules/gui/macosx/playlist.m
index e927396..ea9adf5 100644
--- a/modules/gui/macosx/playlist.m
+++ b/modules/gui/macosx/playlist.m
@@ -315,12 +315,6 @@
     [self saveTableColumns];
 }
 
-- (void)searchfieldChanged:(NSNotification *)o_notification
-{
-    assert(0);
-    [o_search_field setStringValue:[[o_notification object] stringValue]];
-}
-
 - (void)initStrings
 {
     [o_mi_play setTitle: _NS("Play")];
@@ -893,93 +887,9 @@
 //    [self playlistUpdated];
 }
 
-- (NSMutableArray *)subSearchItem:(playlist_item_t *)p_item
-{
-    playlist_t *p_playlist = pl_Get(VLCIntf);
-    playlist_item_t *p_selected_item;
-    int i_selected_row;
-
-    i_selected_row = [o_outline_view selectedRow];
-    if (i_selected_row < 0)
-        i_selected_row = 0;
-
-    p_selected_item = (playlist_item_t *)[[o_outline_view itemAtRow: i_selected_row] pointerValue];
-
-    for (NSUInteger i_current = 0; i_current < p_item->i_children ; i_current++) {
-        char *psz_temp;
-        NSString *o_current_name, *o_current_author;
-
-        PL_LOCK;
-        o_current_name = [NSString stringWithUTF8String:p_item->pp_children[i_current]->p_input->psz_name];
-        psz_temp = input_item_GetInfo(p_item->p_input, _("Meta-information"),_("Artist"));
-        o_current_author = [NSString stringWithUTF8String:psz_temp];
-        free(psz_temp);
-        PL_UNLOCK;
-
-        if (p_selected_item == p_item->pp_children[i_current] && b_selected_item_met == NO)
-            b_selected_item_met = YES;
-        else if (p_selected_item == p_item->pp_children[i_current] && b_selected_item_met == YES)
-            return NULL;
-        else if (b_selected_item_met == YES &&
-                    ([o_current_name rangeOfString:[o_search_field
-                        stringValue] options:NSCaseInsensitiveSearch].length ||
-                      [o_current_author rangeOfString:[o_search_field
-                        stringValue] options:NSCaseInsensitiveSearch].length))
-            /*Adds the parent items in the result array as well, so that we can
-            expand the tree*/
-            return [NSMutableArray arrayWithObject: [NSValue valueWithPointer: p_item->pp_children[i_current]]];
-
-        if (p_item->pp_children[i_current]->i_children > 0) {
-            id o_result = [self subSearchItem:
-                                            p_item->pp_children[i_current]];
-            if (o_result != NULL) {
-                [o_result insertObject: [NSValue valueWithPointer:
-                                p_item->pp_children[i_current]] atIndex:0];
-                return o_result;
-            }
-        }
-    }
-    return NULL;
-}
-
 - (IBAction)searchItem:(id)sender
 {
-    playlist_t * p_playlist = pl_Get(VLCIntf);
-    id o_result;
-
-    int i_row = -1;
-
-    b_selected_item_met = NO;
-
-    /* First, only search after the selected item:
-     * (b_selected_item_met = NO) */
-    o_result = [self subSearchItem:[self currentPlaylistRoot]];
-    if (o_result == NULL)
-        /* If the first search failed, search again from the beginning */
-        o_result = [self subSearchItem:[self currentPlaylistRoot]];
-
-    if (o_result != NULL) {
-        int i_start;
-        if ([[o_result objectAtIndex:0] pointerValue] == p_playlist->p_local_category)
-            i_start = 1;
-        else
-            i_start = 0;
-        NSUInteger count = [o_result count];
-
-        for (NSUInteger i = i_start ; i < count - 1 ; i++) {
-            [o_outline_view expandItem: [o_outline_dict objectForKey:
-                        [NSString stringWithFormat: @"%p",
-                        [[o_result objectAtIndex:i] pointerValue]]]];
-        }
-        i_row = [o_outline_view rowForItem: [o_outline_dict objectForKey:
-                        [NSString stringWithFormat: @"%p",
-                        [[o_result objectAtIndex:count - 1 ]
-                        pointerValue]]]];
-    }
-    if (i_row > -1) {
-        [o_outline_view selectRowIndexes:[NSIndexSet indexSetWithIndex:i_row] byExtendingSelection:NO];
-        [o_outline_view scrollRowToVisible: i_row];
-    }
+    [[self model] searchUpdate:[o_search_field stringValue]];
 }
 
 - (IBAction)recursiveExpandNode:(id)sender



More information about the vlc-commits mailing list