[Gpredict-svn] SF.net SVN: gpredict:[432] trunk
Real time satellite tracking and orbit prediction
Status: Beta
Brought to you by:
csete
From: <cs...@us...> - 2009-09-24 22:41:58
|
Revision: 432 http://gpredict.svn.sourceforge.net/gpredict/?rev=432&view=rev Author: csete Date: 2009-09-24 22:41:49 +0000 (Thu, 24 Sep 2009) Log Message: ----------- Finished new module configuration dialog. Fully functional again. Modified Paths: -------------- trunk/ChangeLog trunk/src/Makefile.am trunk/src/gtk-sat-selector.c trunk/src/mod-cfg.c Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-09-24 16:14:31 UTC (rev 431) +++ trunk/ChangeLog 2009-09-24 22:41:49 UTC (rev 432) @@ -4,9 +4,13 @@ Fixed a bug that caused tree models to be deleted when selecting a new satellite group. * src/mod-cfg.c: - Added list of selected satellites. + Added list of selected satellites and arrow buttons. New satellite selector is now fully + functional and replaces GtkSatTree. + * src/gtk-sat-tree.[ch]: + Removed from build list. + 2009-09-23 Alexandru Csete <oz9aec at gmail.com> * src/gtk-sat-selector.[ch]: Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2009-09-24 16:14:31 UTC (rev 431) +++ trunk/src/Makefile.am 2009-09-24 22:41:49 UTC (rev 432) @@ -52,8 +52,7 @@ gtk-sat-module.c gtk-sat-module.h \ gtk-sat-module-popup.c gtk-sat-module-popup.h \ gtk-sat-module-tmg.c gtk-sat-module-tmg.h \ - gtk-sat-selector.c gtk-sat-slector.h \ - gtk-sat-tree.c gtk-sat-tree.h \ + gtk-sat-selector.c gtk-sat-slector.h \ gtk-single-sat.c gtk-single-sat.h \ gtk-sky-glance.c gtk-sky-glance.h \ gui.c gui.h \ Modified: trunk/src/gtk-sat-selector.c =================================================================== --- trunk/src/gtk-sat-selector.c 2009-09-24 16:14:31 UTC (rev 431) +++ trunk/src/gtk-sat-selector.c 2009-09-24 22:41:49 UTC (rev 432) @@ -264,11 +264,6 @@ gtk_container_add (GTK_CONTAINER (GTK_SAT_SELECTOR (widget)->swin), GTK_SAT_SELECTOR (widget)->tree); - - //gtk_container_add (GTK_CONTAINER (widget), GTK_SAT_TREE (widget)->swin); - //gtk_box_pack_start (GTK_BOX (widget), GTK_SAT_SELECTOR (widget)->groups, FALSE, FALSE, 0); - //gtk_box_pack_start (GTK_BOX (widget), GTK_SAT_SELECTOR (widget)->swin, TRUE, TRUE, 0); - table = gtk_table_new (7, 4, TRUE); /* Search */ @@ -286,7 +281,7 @@ gtk_table_attach (GTK_TABLE (table), gtk_label_new (_("Group:")), 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); gtk_table_attach (GTK_TABLE (table), GTK_SAT_SELECTOR (widget)->groups, 1, 4, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); + GTK_FILL, GTK_SHRINK, 0, 0); /* satellite list */ Modified: trunk/src/mod-cfg.c =================================================================== --- trunk/src/mod-cfg.c 2009-09-24 16:14:31 UTC (rev 431) +++ trunk/src/mod-cfg.c 2009-09-24 22:41:49 UTC (rev 432) @@ -66,21 +66,18 @@ #include "config-keys.h" #include "sat-cfg.h" #include "sat-pref-modules.h" -#include "gtk-sat-tree.h" #include "qth-editor.h" #include "mod-cfg.h" - #include "gtk-sat-selector.h" + extern GtkWidget *app; - /* private widgets */ static GtkWidget *namew; /* GtkEntry widget for module name */ static GtkWidget *locw; /* GtkComboBox for location selection */ -static GtkWidget *tree; /* OBSOLETE GtkSatTree for selecting satellites */ static GtkWidget *satlist; /* list of selected satellites */ @@ -106,7 +103,13 @@ GtkTreeIter *b, gpointer userdata); +static void row_activated_cb (GtkTreeView *view, GtkTreePath *path, + GtkTreeViewColumn *column, gpointer data); +static void addbut_clicked_cb (GtkButton *button, GtkSatSelector *selector); +static void delbut_clicked_cb (GtkButton *button, GtkSatSelector *selector); + + /** \brief Create a new module. * * This function creates a new module. The name of the module is @@ -121,8 +124,8 @@ mod_cfg_status_t status; gboolean finished = FALSE; gsize num = 0; - guint *sats; + /* create cfg data */ cfgdata = g_key_file_new (); @@ -138,9 +141,9 @@ /* user pressed OK */ case GTK_RESPONSE_OK: - /* FIXME check that user has selected at least one satellite */ - sats = gtk_sat_tree_get_selected (GTK_SAT_TREE (tree), &num); + num = gtk_tree_model_iter_n_children (gtk_tree_view_get_model (GTK_TREE_VIEW (satlist)), NULL); + if (num > 0) { /* we have at least one sat selected */ gchar *filename,*confdir; @@ -198,8 +201,6 @@ finished = TRUE; } - - g_free (sats); } else { sat_log_log (SAT_LOG_LEVEL_DEBUG, @@ -224,7 +225,7 @@ break; /* bring up properties editor */ - case GTK_RESPONSE_HELP: + case GTK_RESPONSE_HELP: edit_advanced_settings (GTK_DIALOG (dialog), cfgdata); finished = FALSE; break; @@ -262,7 +263,6 @@ gint response; gboolean finished = FALSE; gsize num = 0; - guint *sats; mod_cfg_status_t status = MOD_CFG_CANCEL; @@ -279,14 +279,13 @@ case GTK_RESPONSE_OK: /* check that user has selected at least one satellite */ - sats = gtk_sat_tree_get_selected (GTK_SAT_TREE (tree), &num); + num = gtk_tree_model_iter_n_children (gtk_tree_view_get_model (GTK_TREE_VIEW (satlist)), NULL); if (num > 0) { /* we have at least one sat selected */ mod_cfg_apply (cfgdata); finished = TRUE; - g_free (sats); status = MOD_CFG_OK; } else { @@ -467,6 +466,7 @@ GtkWidget *table; GtkWidget *label; GtkWidget *swin; + GtkWidget *addbut, *delbut; GtkTooltips *tooltips; gchar *icon; /* window icon file name */ @@ -571,46 +571,7 @@ gtk_label_set_markup (GTK_LABEL (label), _("<b>Select Satellites:</b>")); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, FALSE, FALSE, 5); - /* OBSOLETE satellite selector */ - tree = gtk_sat_tree_new (0); - if (!new) { - /* select satellites */ - gint *sats = NULL; - gsize length; - GError *error = NULL; - guint i; - sats = g_key_file_get_integer_list (cfgdata, - MOD_CFG_GLOBAL_SECTION, - MOD_CFG_SATS_KEY, - &length, - &error); - - if (error != NULL) { - sat_log_log (SAT_LOG_LEVEL_ERROR, - _("%s: Failed to get list of satellites (%s)"), - __FUNCTION__, error->message); - - g_clear_error (&error); - - /* GLib API says nothing about the contents in case of error */ - if (sats) { - g_free (sats); - } - - } - else { - for (i = 0; i < length; i++) { - gtk_sat_tree_select (GTK_SAT_TREE (tree), sats[i]); - } - g_free (sats); - } - - } - - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), tree, TRUE, TRUE, 0); - - /*** NEW CODE ***/ /* satellite selector */ GtkWidget *selector = gtk_sat_selector_new (0); g_signal_connect (selector, "sat-activated", @@ -622,10 +583,19 @@ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (swin), satlist); + /* Add and Delete buttons */ + addbut = gpredict_hstock_button (GTK_STOCK_GO_FORWARD, NULL, + _("Add satellite to list of selected satellites.")); + g_signal_connect (addbut, "clicked", G_CALLBACK (addbut_clicked_cb), selector); + delbut = gpredict_hstock_button (GTK_STOCK_GO_BACK, NULL, + _("Remove satellite from the list of selected satellites.")); + g_signal_connect (delbut, "clicked", G_CALLBACK (delbut_clicked_cb), NULL); table = gtk_table_new (7, 9, TRUE); gtk_table_attach_defaults (GTK_TABLE (table), selector, 0, 4, 0, 7); gtk_table_attach_defaults (GTK_TABLE (table), swin, 5, 9, 2, 7); + gtk_table_attach (GTK_TABLE (table), addbut, 4, 5, 4, 5, GTK_SHRINK, GTK_SHRINK, 2, 5); + gtk_table_attach (GTK_TABLE (table), delbut, 4, 5, 5, 6, GTK_SHRINK, GTK_SHRINK, 2, 5); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), table, TRUE, TRUE, 0); @@ -649,6 +619,8 @@ satlist = gtk_tree_view_new (); + gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (satlist), TRUE); + //gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (satlist), GTK_TREE_VIEW_GRID_LINES_HORIZONTAL); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Selected Satellites"), renderer, @@ -673,6 +645,10 @@ gtk_tree_view_insert_column (GTK_TREE_VIEW (satlist), column, -1); gtk_tree_view_column_set_visible (column, FALSE); + /* "row-activated" signal is used to catch double click events, which means + a satellite has been selected. This will cause the satellite to be deleted */ + g_signal_connect (GTK_TREE_VIEW (satlist), "row-activated", + G_CALLBACK(row_activated_cb), NULL); /* create the model */ store = gtk_list_store_new (GTK_SAT_SELECTOR_COL_NUM, @@ -720,7 +696,6 @@ else { for (i = 0; i < length; i++) { add_selected_sat (store, sats[i]); - g_print ("ADD: %d\n", sats[i]); } g_free (sats); } @@ -963,11 +938,13 @@ */ static void mod_cfg_apply (GKeyFile *cfgdata) { - guint *sats; gsize num; guint i; + guint catnum; gchar *satstr = NULL; gchar *buff; + GtkTreeModel *model; + GtkTreeIter iter; /* store location */ @@ -993,20 +970,34 @@ g_free (buff); - /* store satellites */ - sats = gtk_sat_tree_get_selected (GTK_SAT_TREE (tree), &num); + /* get number of satellites already in list */ + model = gtk_tree_view_get_model (GTK_TREE_VIEW (satlist)); + num = gtk_tree_model_iter_n_children (model, NULL); + + /* loop over list entries and check their catnums */ for (i = 0; i < num; i++) { + if (gtk_tree_model_iter_nth_child (model, &iter, NULL, i)) { + gtk_tree_model_get (model, &iter, + GTK_SAT_SELECTOR_COL_CATNUM, &catnum, + -1); - if (i) { - buff = g_strdup_printf ("%s;%d", satstr, sats[i]); - g_free (satstr); + if (i) { + buff = g_strdup_printf ("%s;%d", satstr, catnum); + g_free (satstr); + } + else { + buff = g_strdup_printf ("%d", catnum); + } + satstr = g_strdup (buff); + g_free (buff); } else { - buff = g_strdup_printf ("%d", sats[i]); + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%s: Could not fetch entry %d in satellite list"), + __FILE__, __FUNCTION__, i); } - satstr = g_strdup (buff); - g_free (buff); + } g_key_file_set_string (cfgdata, @@ -1014,8 +1005,8 @@ MOD_CFG_SATS_KEY, satstr); g_free (satstr); - g_free (sats); + sat_log_log (SAT_LOG_LEVEL_MSG, _("%s: Applied changes to %s."), __FUNCTION__, gtk_entry_get_text (GTK_ENTRY (namew))); @@ -1130,16 +1121,13 @@ */ static void sat_activated_cb (GtkSatSelector *selector, gint catnr, gpointer data) { - gchar *satname; - gint catnum; - gdouble epoch; + GtkListStore *store; - gtk_sat_selector_get_selected (selector, &catnum, &satname, &epoch); - /* Add satellite to selected list */ + store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (satlist))); + add_selected_sat (store, catnr); - g_free (satname); } @@ -1172,3 +1160,79 @@ return ret; } + + +/** \brief Signal handler for managing satellite selection. + * \param view Pointer to the GtkTreeView object. + * \param path The path of the row that was activated. + * \param column The column where the activation occured. + * \param data Pointer to the GtkSatselector widget. + * + * This function is called when the user double clicks on a satellite in the + * list of satellites. The double clicked satellite is removed from the list. + */ +static void row_activated_cb (GtkTreeView *view, GtkTreePath *path, + GtkTreeViewColumn *column, gpointer data) +{ + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + gboolean haveselection = FALSE; /* this flag is set to TRUE if there is a selection */ + + + /* get the selected row in the treeview */ + selection = gtk_tree_view_get_selection (view); + haveselection = gtk_tree_selection_get_selected (selection, &model, &iter); + + if (haveselection) { + gtk_list_store_remove (GTK_LIST_STORE(model), &iter); + } +} + + +/** \brief Signal handler for "->" button signals. + * \param button Pointer to the button that received the signal. + * \param selector Pointer to the GtkSatSelector. + */ +static void addbut_clicked_cb (GtkButton *button, GtkSatSelector *selector) +{ + GtkListStore *store; + gint catnum = 0; + gchar *name; + gdouble epoch; + + + /* get the selected row in the treeview */ + gtk_sat_selector_get_selected (selector, &catnum, &name, &epoch); + + if (catnum) { + /* Add satellite to selected list */ + store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (satlist))); + add_selected_sat (store, catnum); + } + +} + + +/** \brief Signal handler for "<-" button signals. + * \param button Pointer to the button that received the signal. + * \param selector Pointer to the GtkSatSelector (not used). + */ +static void delbut_clicked_cb (GtkButton *button, GtkSatSelector *selector) +{ + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + gboolean haveselection = FALSE; /* this flag is set to TRUE if there is a selection */ + + + /* get the selected row in the treeview */ + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (satlist)); + haveselection = gtk_tree_selection_get_selected (selection, &model, &iter); + + if (haveselection) { + gtk_list_store_remove (GTK_LIST_STORE(model), &iter); + } + +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |