]> git.sesse.net Git - vlc/commitdiff
Restore search
authorClément Stenac <zorglub@videolan.org>
Mon, 22 Nov 2004 10:33:29 +0000 (10:33 +0000)
committerClément Stenac <zorglub@videolan.org>
Mon, 22 Nov 2004 10:33:29 +0000 (10:33 +0000)
modules/gui/wxwindows/playlist.cpp
modules/gui/wxwindows/wxwindows.h

index 3f06de1da4f5d795b31dd36b12fbd86a62619e12..bf91c8c9e19c0d05ddd79eda363e61b84418a87b 100644 (file)
@@ -401,6 +401,7 @@ Playlist::Playlist( intf_thread_t *_p_intf, wxWindow *p_parent ):
 
     vlc_object_release( p_playlist );
 
+
     /* Update the playlist */
     Rebuild();
 }
@@ -542,7 +543,7 @@ wxTreeItemId Playlist::FindItem( wxTreeItemId root, playlist_item_t *p_item )
     return dummy;
 }
 
-/*wxTreeItemId Playlist::FindItemByName( wxTreeItemId root, wxString search_string, wxTreeItemId current )
+wxTreeItemId Playlist::FindItemByName( wxTreeItemId root, wxString search_string, wxTreeItemId current, vlc_bool_t *pb_current_found )
 {
     long cookie;
     PlaylistItem *p_wxcurrent;
@@ -555,10 +556,19 @@ wxTreeItemId Playlist::FindItem( wxTreeItemId root, playlist_item_t *p_item )
         if( treectrl->GetItemText( item).Lower().Contains(
                                                  search_string.Lower() ) )
         {
-            return item;
+            if( !current.IsOk() || *pb_current_found == VLC_TRUE )
+            {
+                return item;
+            }
+            else if( current.IsOk() && item == current )
+            {
+                *pb_current_found = VLC_TRUE;
+            }
+        }
         if( treectrl->ItemHasChildren( item ) )
         {
-            wxTreeItemId search = FindItem( item, p_item );
+            wxTreeItemId search = FindItemByName( item, search_string, current,
+                                                  pb_current_found );
             if( search.IsOk() )
             {
                 return search;
@@ -566,12 +576,10 @@ wxTreeItemId Playlist::FindItem( wxTreeItemId root, playlist_item_t *p_item )
         }
         item = treectrl->GetNextChild( root, cookie);
     }
-  */  /* Not found */
-    /*wxTreeItemId dummy;
+    /* Not found */
+    wxTreeItemId dummy;
     return dummy;
 }
-*/
-
 
 
 void Playlist::SetCurrentItem( wxTreeItemId item )
@@ -990,10 +998,29 @@ void Playlist::OnSearch( wxCommandEvent& WXUNUSED(event) )
 {
     wxString search_string = search_text->GetValue();
 
-    bool b_ok = false;
-    int i_current;
-    int i_first = 0 ;
-    int i_item = -1;
+    vlc_bool_t pb_found = VLC_FALSE;
+
+    wxTreeItemId found =
+     FindItemByName( treectrl->GetRootItem(), search_string,
+                     search_current, &pb_found );
+
+    if( found.IsOk() )
+    {
+        search_current = found;
+        treectrl->SelectItem( found, true );
+    }
+    else
+    {
+        wxTreeItemId dummy;
+        search_current = dummy;
+        found =  FindItemByName( treectrl->GetRootItem(), search_string,
+                                 search_current, &pb_found );
+        if( found.IsOk() )
+        {
+            search_current = found;
+            treectrl->SelectItem( found, true );
+        }
+    }
 }
 
 #if 0
index 5ea5f3b04e46fbeb26b8f7b6d968fe8276573e49..c209c02d78bdc644e96fd6599ad84a3e12d9f1cc 100644 (file)
@@ -842,6 +842,7 @@ private:
     void CreateNode( playlist_t *, playlist_item_t*, wxTreeItemId );
 
     wxTreeItemId FindItem( wxTreeItemId, playlist_item_t * );
+    wxTreeItemId FindItemByName( wxTreeItemId, wxString, wxTreeItemId, vlc_bool_t *);
     void SetCurrentItem( wxTreeItemId );
     void UpdateTreeItem( playlist_t *, wxTreeItemId );
 
@@ -869,6 +870,7 @@ private:
     int i_current_view;
 
     wxTreeItemId i_popup_item;
+    wxTreeItemId search_current;
     playlist_item_t *p_popup_item;
     playlist_item_t *p_popup_parent;