[Gpredict-svn] SF.net SVN: gpredict:[759] trunk
Real time satellite tracking and orbit prediction
Status: Beta
Brought to you by:
csete
|
From: <aa...@us...> - 2011-02-08 16:17:56
|
Revision: 759
http://gpredict.svn.sourceforge.net/gpredict/?rev=759&view=rev
Author: aa1vs
Date: 2011-02-08 16:17:50 +0000 (Tue, 08 Feb 2011)
Log Message:
-----------
Replace search capability with filter capability in gtk-sat-selector.
Modified Paths:
--------------
trunk/ChangeLog
trunk/NEWS
trunk/src/gtk-sat-selector.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2011-02-02 20:10:06 UTC (rev 758)
+++ trunk/ChangeLog 2011-02-08 16:17:50 UTC (rev 759)
@@ -1,3 +1,8 @@
+2011-02-08 Charles Suprin <hamaa1vs at gmail.com>
+
+ * src/gtk-sat-selector.c
+ Replace search capability with filter capability in gtk-sat-selector.
+
2011-02-02 Charles Suprin <hamaa1vs at gmail.com>
* src/mod-cfg.c
Modified: trunk/NEWS
===================================================================
--- trunk/NEWS 2011-02-02 20:10:06 UTC (rev 758)
+++ trunk/NEWS 2011-02-08 16:17:50 UTC (rev 759)
@@ -8,6 +8,7 @@
- Fixed bug 3099314: Rotator Thrashing.
- Fixed bug 2167508: problems in rotator controller.
- Fixed bug from Ubuntu #706452:Update from local files won't work with files in UPPER case
+- Fixed bug 3171615: Searching for satellites in the satellite selector
Changes in version 1.2 (12 Oct 2010)
Modified: trunk/src/gtk-sat-selector.c
===================================================================
--- trunk/src/gtk-sat-selector.c 2011-02-02 20:10:06 UTC (rev 758)
+++ trunk/src/gtk-sat-selector.c 2011-02-08 16:17:50 UTC (rev 759)
@@ -55,10 +55,14 @@
GtkTreeViewColumn *column,
gpointer data);
+static gboolean cb_entry_changed( GtkEditable *entry, GtkTreeView *treeview );
static gint compare_func (GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
gpointer userdata);
+static gboolean sat_filter_func( GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GtkEntry *entry );
static void epoch_cell_data_function (GtkTreeViewColumn *col,
@@ -218,8 +222,8 @@
GtkTreeViewColumn *column;
GtkWidget *table;
GtkWidget *frame;
+ GtkTreeModel *filter;
-
if (!flags)
flags = GTK_SAT_SELECTOR_DEFAULT_FLAGS;
@@ -236,14 +240,12 @@
/* combo box signal handler will be connected at the end after it has
been populated to avoid false triggering */
+ /*create search widget early so it can be used for callback*/
+ GTK_SAT_SELECTOR (widget)->search = gtk_entry_new ();
/* create list and model */
- selector->tree = gtk_tree_view_new ();
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (selector->tree), TRUE);
create_and_fill_models (selector);
model = GTK_TREE_MODEL (g_slist_nth_data (selector->models, 0));
- gtk_tree_view_set_model (GTK_TREE_VIEW (selector->tree), model);
- g_object_unref (model);
/* sort the tree by name */
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (model),
@@ -255,6 +257,21 @@
GTK_SAT_SELECTOR_COL_NAME,
GTK_SORT_ASCENDING);
+ /*create a filtering tree*/
+ filter = gtk_tree_model_filter_new(model,NULL);
+ gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter),
+ (GtkTreeModelFilterVisibleFunc) sat_filter_func,GTK_SAT_SELECTOR(widget)->search,NULL);
+
+ selector->tree = gtk_tree_view_new_with_model(filter);
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (selector->tree), TRUE);
+
+ g_signal_connect( G_OBJECT(GTK_SAT_SELECTOR(widget)->search), "changed",
+ G_CALLBACK(cb_entry_changed),
+ GTK_TREE_VIEW( selector->tree));
+
+ g_object_unref (model);
+
+
/* we can now connect combobox signal handler */
g_signal_connect (GTK_SAT_SELECTOR (widget)->groups, "changed",
G_CALLBACK(group_selected_cb), widget);
@@ -310,21 +327,14 @@
table = gtk_table_new (7, 4, TRUE);
- /* Search */
+ /* Search */
+ /* Finish setting up the search entry*/
gtk_table_attach (GTK_TABLE (table), gtk_label_new (_("Search")), 0, 1, 0, 1,
GTK_SHRINK, GTK_SHRINK, 0, 0);
- GTK_SAT_SELECTOR (widget)->search = gtk_entry_new ();
gtk_widget_set_tooltip_text (GTK_SAT_SELECTOR (widget)->search,
_("Start typing in this field to search for a satellite"\
" in the selected group."));
- /* this enables automatic search */
- gtk_tree_view_set_search_entry (GTK_TREE_VIEW (GTK_SAT_SELECTOR (widget)->tree),
- GTK_ENTRY (GTK_SAT_SELECTOR (widget)->search));
- gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW (GTK_SAT_SELECTOR (widget)->tree),
- gtk_sat_selector_search_equal_func,
- NULL,
- NULL);
gtk_table_attach (GTK_TABLE (table), GTK_SAT_SELECTOR (widget)->search, 1, 4, 0, 1,
GTK_SHRINK, GTK_SHRINK, 0, 0);
@@ -619,6 +629,7 @@
GtkSatSelector *selector = GTK_SAT_SELECTOR (data);
GtkTreeModel *newmodel;
GtkTreeModel *oldmodel;
+ GtkTreeModel *filter;
gint sel;
sel = gtk_combo_box_get_active (combobox);
@@ -632,15 +643,27 @@
/* now replace oldmodel with newmodel */
newmodel = GTK_TREE_MODEL (g_slist_nth_data (selector->models, sel));
- gtk_tree_view_set_model (GTK_TREE_VIEW (selector->tree), newmodel);
- g_object_unref (newmodel);
/* We changed the GtkTreeModel so we need to reset the sort column ID */
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (newmodel),
GTK_SAT_SELECTOR_COL_NAME,
GTK_SORT_ASCENDING);
+ /*build a filter around the new model*/
+ filter = gtk_tree_model_filter_new(newmodel,NULL);
+ gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter),
+ (GtkTreeModelFilterVisibleFunc) sat_filter_func,GTK_SAT_SELECTOR(selector)->search,NULL);
+ /*install the filter tree and hookup callbacks*/
+ gtk_tree_view_set_model (GTK_TREE_VIEW (selector->tree), filter);
+ g_signal_connect( G_OBJECT(GTK_SAT_SELECTOR(selector)->search), "changed",
+ G_CALLBACK(cb_entry_changed),
+ GTK_TREE_VIEW( selector->tree));
+ g_object_unref (newmodel);
+ g_object_unref (filter);
+
+
+
}
@@ -874,3 +897,36 @@
return (temp);
}
+
+/** \brief Make the tree refilter after something entered in the search box
+ **/
+
+static gboolean cb_entry_changed( GtkEditable *entry,
+ GtkTreeView *treeview )
+{
+ GtkTreeModelFilter *filter;
+
+ filter = GTK_TREE_MODEL_FILTER( gtk_tree_view_get_model( treeview ) );
+ gtk_tree_model_filter_refilter( filter );
+
+ return( FALSE );
+}
+
+/** \brief Selects satellites whose name contains the substring in entry.
+ **/
+static gboolean sat_filter_func( GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GtkEntry *entry )
+{
+ const gchar *searchstring;
+ gchar *satname;
+
+ gtk_tree_model_get( model, iter, GTK_SAT_SELECTOR_COL_NAME, &satname, -1 );
+ searchstring = gtk_entry_get_text( entry );
+
+ if( strcasestr( satname, searchstring ) != NULL )
+ return( TRUE );
+ else
+ return( FALSE );
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|