Revision: 2156
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=2156&view=rev
Author:   jcsjcs
Date:     2008-12-07 11:39:42 +0000 (Sun, 07 Dec 2008)

Log Message:
-----------
        * data/gtkpod.glade
          src/display.c: Add an item to the View menu to show/hide the
          filter bar (AKA: search bar)

        * src/display_tracks:
          Fix a number of bugs relating to the filter bar. Thanks to
          Andrea for the pointer.

          Remove filter text when switching from one playlist to another:
          leaving the filter in place immensely increases the time for display.

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog
    gtkpod/trunk/data/gtkpod.glade
    gtkpod/trunk/src/display.c
    gtkpod/trunk/src/display_tracks.c

Modified: gtkpod/trunk/ChangeLog
===================================================================
--- gtkpod/trunk/ChangeLog      2008-11-30 10:50:14 UTC (rev 2155)
+++ gtkpod/trunk/ChangeLog      2008-12-07 11:39:42 UTC (rev 2156)
@@ -1,3 +1,16 @@
+2008-12-07 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
+       * data/gtkpod.glade
+         src/display.c: Add an item to the View menu to show/hide the
+         filter bar (AKA: search bar)
+
+       * src/display_tracks:
+         Fix a number of bugs relating to the filter bar. Thanks to
+         Andrea for the pointer.
+
+         Remove filter text when switching from one playlist to another:
+         leaving the filter in place immensely increases the time for display.
+
 2008-11-08 Jorg Schuler <jcsjcs at users.sourceforge.net>
 
        * src/display_tracks.c

Modified: gtkpod/trunk/data/gtkpod.glade
===================================================================
--- gtkpod/trunk/data/gtkpod.glade      2008-11-30 10:50:14 UTC (rev 2155)
+++ gtkpod/trunk/data/gtkpod.glade      2008-12-07 11:39:42 UTC (rev 2156)
@@ -793,6 +793,14 @@
                       </widget>
                     </child>
                     <child>
+                      <widget class="GtkCheckMenuItem" id="filterbar_menu">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">_Filter 
Bar</property>
+                        <property name="use_underline">True</property>
+                        <signal name="activate" 
handler="on_filterbar_menu_activate"/>
+                      </widget>
+                    </child>
+                    <child>
                       <widget class="GtkCheckMenuItem" id="tooltips_menu">
                         <property name="visible">True</property>
                         <property name="label" 
translatable="yes">_Tooltips</property>
@@ -801,6 +809,11 @@
                       </widget>
                     </child>
                     <child>
+                      <widget class="GtkSeparatorMenuItem" id="menuitem4">
+                        <property name="visible">True</property>
+                      </widget>
+                    </child>
+                    <child>
                       <widget class="GtkCheckMenuItem" id="info_window_menu">
                         <property name="visible">True</property>
                         <property name="label" translatable="yes">_Info 
Window</property>
@@ -1464,7 +1477,7 @@
                               <widget class="GtkLabel" id="label22">
                                 <property name="visible">True</property>
                                 <property 
name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="label" 
translatable="yes">Search:</property>
+                                <property name="label" 
translatable="yes">Filter:</property>
                               </widget>
                               <packing>
                                 <property name="expand">False</property>

Modified: gtkpod/trunk/src/display.c
===================================================================
--- gtkpod/trunk/src/display.c  2008-11-30 10:50:14 UTC (rev 2155)
+++ gtkpod/trunk/src/display.c  2008-12-07 11:39:42 UTC (rev 2156)
@@ -1,4 +1,4 @@
-/* Time-stamp: <2008-06-29 21:57:29 jcs>
+/* Time-stamp: <2008-12-07 19:10:37 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -388,19 +388,24 @@
 {
        GtkWidget *upbutton = gtkpod_xml_get_widget (main_window_xml, 
"searchbar_up_button");
        GtkWidget *searchbar = gtkpod_xml_get_widget (main_window_xml, 
"searchbar_hpanel");
+       GtkCheckMenuItem *mi = GTK_CHECK_MENU_ITEM (gtkpod_xml_get_widget 
(main_window_xml, "filterbar_menu"));
+
        g_return_if_fail (upbutton);
        g_return_if_fail (searchbar);
+       g_return_if_fail (mi);
                
        if (prefs_get_int ("display_search_entry"))
        {
                gtk_widget_show_all (searchbar);
                gtk_widget_hide (upbutton);
+               gtk_check_menu_item_set_active (mi, TRUE);
        }
        else
        {               
                gtk_widget_hide_all (searchbar);
                gtk_widget_show (upbutton);
                gtk_widget_set_sensitive (upbutton, TRUE);
+               gtk_check_menu_item_set_active (mi, FALSE);
        }
 }
 
@@ -1256,6 +1261,16 @@
 
 
 G_MODULE_EXPORT void
+on_filterbar_menu_activate               (GtkMenuItem     *menuitem,
+                                         gpointer         user_data)
+{
+    prefs_set_int("display_search_entry",
+       gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem)));
+    display_show_hide_searchbar ();
+}
+
+
+G_MODULE_EXPORT void
 on_more_sort_tabs_activate             (GtkMenuItem     *menuitem,
                                        gpointer         user_data)
 {

Modified: gtkpod/trunk/src/display_tracks.c
===================================================================
--- gtkpod/trunk/src/display_tracks.c   2008-11-30 10:50:14 UTC (rev 2155)
+++ gtkpod/trunk/src/display_tracks.c   2008-12-07 11:39:42 UTC (rev 2156)
@@ -93,9 +93,12 @@
        int i;
 
        gtk_tree_model_get(model, iter, READOUT_COL, &tr, -1);
-       
-    for (i = 0; i < TM_NUM_COLUMNS; i++)
-    {
+
+       if (tr)
+       {
+           if (text[0] == 0x0)   return TRUE;
+           for (i = 0; i < TM_NUM_COLUMNS; i++)
+           {
                gint visible = prefs_get_int_index("col_visible", i);
                gchar *data;
                
@@ -112,6 +115,7 @@
                }
 
                g_free (data);
+           }
        }
 
        return result;
@@ -133,11 +137,11 @@
         gtk_tree_model_filter_convert_iter_to_child_iter 
(GTK_TREE_MODEL_FILTER (model), to, from);
 }
 
-static void update_model_view (GtkTreeModel *model)
+/*static void update_model_view (GtkTreeModel *model)
 {
     if (GTK_IS_TREE_MODEL_FILTER (model))
         gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model));
-}
+}*/
 
 static GtkTreeModelFilter *get_filter (GtkTreeView *tree)
 {
@@ -265,7 +269,7 @@
        g_free (link->data);
     g_list_free (iterlist);
 
-    update_model_view (model);
+/*    update_model_view (model); -- not needed */
     tm_rows_reordered ();
     return TRUE;
 }
@@ -746,10 +750,12 @@
         convert_iter (model, into_iter, &iter);
     }
     else
+    {
         gtk_list_store_append (get_model_as_store (model), &iter);
+    }
     
     gtk_list_store_set (get_model_as_store (model), &iter, READOUT_COL, track, 
-1);
-    update_model_view (model);
+/*    update_model_view (model); -- not needed */
 }
 
 
@@ -778,7 +784,7 @@
 
         convert_iter (model, iter, &temp);
         gtk_list_store_remove (get_model_as_store (model), &temp);
-        update_model_view (model);
+/*        update_model_view (model); -- not needed */
         return TRUE;
     }
     return FALSE;
@@ -793,7 +799,7 @@
     if (model)
     {
         gtk_tree_model_foreach (model, tm_delete_track, track);
-        update_model_view (model);
+/*        update_model_view (model); -- not needed */
     }
 }
 
@@ -802,17 +808,29 @@
 void tm_remove_all_tracks ()
 {
     GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+    GtkTreeModel *realmodel;
     GtkTreeIter iter;
+    GtkWidget *search_entry = gtkpod_xml_get_widget (main_window_xml, 
"search_entry");
 
-    while (gtk_tree_model_get_iter_first (model, &iter))
+    /* remove all tracks, including tracks filtered out */
+    if (GTK_IS_TREE_MODEL_FILTER (model))
     {
-        GtkTreeIter temp;
+       realmodel = gtk_tree_model_filter_get_model 
(GTK_TREE_MODEL_FILTER(model));
+    }
+    else
+    {
+       realmodel = model;
+    }
 
-        convert_iter (model, &iter, &temp);
-        gtk_list_store_remove (get_model_as_store (model), &temp);
+    while (gtk_tree_model_get_iter_first (realmodel, &iter))
+    {
+        gtk_list_store_remove (get_model_as_store (realmodel), &iter);
     }
 
-    update_model_view (model);
+    /* reset filter text -- if many tracks are added with the filter
+     * activated, a lot of time is needed */
+    gtk_entry_set_text (GTK_ENTRY (search_entry), "");
+
     tm_store_col_order ();
     tm_update_default_sizes ();
 }
@@ -1981,6 +1999,11 @@
     {
        GtkTreeModel *model= gtk_tree_view_get_model (track_treeview);
 
+       if (GTK_IS_TREE_MODEL_FILTER (model))
+       {
+           model = gtk_tree_model_filter_get_model 
(GTK_TREE_MODEL_FILTER(model));
+       }
+
        prefs_set_int("tm_sort", SORT_NONE);
        if (!BROKEN_GTK_TREE_SORT)
        {
@@ -2157,6 +2180,12 @@
     if (track_treeview)
     {
        GtkTreeModel *model= gtk_tree_view_get_model (track_treeview);
+
+       if (GTK_IS_TREE_MODEL_FILTER (model))
+       {
+           model = gtk_tree_model_filter_get_model 
(GTK_TREE_MODEL_FILTER(model));
+       }
+
        if (order != SORT_NONE)
        {
            gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
@@ -2698,6 +2727,12 @@
            {
                /* Re-enable sorting */
                GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+
+               if (GTK_IS_TREE_MODEL_FILTER (model))
+               {
+                   model = gtk_tree_model_filter_get_model 
(GTK_TREE_MODEL_FILTER(model));
+               }
+
                if (BROKEN_GTK_TREE_SORT)
                {
                    gtk_tree_sortable_set_sort_func (
@@ -2723,6 +2758,12 @@
            {
                /* Disable sorting */
                GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+
+               if (GTK_IS_TREE_MODEL_FILTER (model))
+               {
+                   model = gtk_tree_model_filter_get_model 
(GTK_TREE_MODEL_FILTER(model));
+               }
+
                if (BROKEN_GTK_TREE_SORT)
                {
                    gtk_tree_sortable_set_sort_func (
@@ -2853,7 +2894,7 @@
                                    NULL, NULL);
     }
     
-    update_model_view (model);
+/*    update_model_view (model); -- not needed */
     tm_rows_reordered ();
     C_FREE (buf);
     return TRUE;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to