[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.
|