[Gpredict-svn] SF.net SVN: gpredict:[87] trunk/src
Real time satellite tracking and orbit prediction
Status: Beta
Brought to you by:
csete
From: <cs...@us...> - 2008-09-06 12:02:13
|
Revision: 87 http://gpredict.svn.sourceforge.net/gpredict/?rev=87&view=rev Author: csete Date: 2008-09-06 12:02:22 +0000 (Sat, 06 Sep 2008) Log Message: ----------- Finished implementation of freq controller. Modified Paths: -------------- trunk/src/gtk-freq-knob.c trunk/src/gtk-freq-knob.h trunk/src/gtk-rig-ctrl.c trunk/src/gtk-rig-ctrl.h trunk/src/gtk-rot-knob.c Modified: trunk/src/gtk-freq-knob.c =================================================================== --- trunk/src/gtk-freq-knob.c 2008-09-05 21:57:21 UTC (rev 86) +++ trunk/src/gtk-freq-knob.c 2008-09-06 12:02:22 UTC (rev 87) @@ -29,11 +29,14 @@ * * More info... * + * 1 222.333 444 MHz + * * \bug This should be a generic widget, not just frequency specific * */ #include <gtk/gtk.h> #include <glib/gi18n.h> +#include <math.h> #include "gtk-freq-knob.h" #ifdef HAVE_CONFIG_H # include <build-config.h> @@ -44,13 +47,28 @@ static void gtk_freq_knob_class_init (GtkFreqKnobClass *class); static void gtk_freq_knob_init (GtkFreqKnob *list); static void gtk_freq_knob_destroy (GtkObject *object); - static void gtk_freq_knob_update (GtkFreqKnob *knob); +static void button_clicked_cb (GtkWidget *button, gpointer data); - static GtkHBoxClass *parent_class = NULL; +#define FMTSTR "<span size='xx-large'>%c</span>" +/* x-index in table for buttons and labels */ +static const guint idx[] = { + 0, + 2, + 3, + 4, + 6, + 7, + 8, + 10, + 11, + 12 +}; + + GType gtk_freq_knob_get_type () { @@ -104,7 +122,8 @@ static void gtk_freq_knob_init (GtkFreqKnob *knob) { - + knob->min = 0.0; + knob->max = 9999999999.0; } @@ -126,14 +145,72 @@ { GtkWidget *widget; GtkWidget *table; + GtkWidget *label; + guint i; + gint delta; widget = g_object_new (GTK_TYPE_FREQ_KNOB, NULL); GTK_FREQ_KNOB(widget)->value = val; + + table = gtk_table_new (3, 14, FALSE); + + /* create buttons and labels */ + for (i = 0; i < 10; i++) { + /* labels */ + GTK_FREQ_KNOB(widget)->digits[i] = gtk_label_new (NULL); + gtk_table_attach (GTK_TABLE (table), GTK_FREQ_KNOB(widget)->digits[i], + idx[i], idx[i]+1, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); + + /* UP buttons */ + GTK_FREQ_KNOB(widget)->buttons[i] = gtk_button_new (); + + label = gtk_label_new ("\342\226\264"); + gtk_container_add (GTK_CONTAINER(GTK_FREQ_KNOB(widget)->buttons[i]), + label); + gtk_button_set_relief (GTK_BUTTON(GTK_FREQ_KNOB(widget)->buttons[i]), + GTK_RELIEF_NONE); + delta = (gint) pow(10,9-i); + g_object_set_data (G_OBJECT (GTK_FREQ_KNOB(widget)->buttons[i]), + "delta", GINT_TO_POINTER(delta)); + gtk_table_attach (GTK_TABLE (table), GTK_FREQ_KNOB(widget)->buttons[i], + idx[i], idx[i]+1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); + g_signal_connect (GTK_FREQ_KNOB(widget)->buttons[i], "clicked", + G_CALLBACK (button_clicked_cb), widget); + + /* DOWN buttons */ + GTK_FREQ_KNOB(widget)->buttons[i+10] = gtk_button_new (); + + label = gtk_label_new ("\342\226\276"); + gtk_container_add (GTK_CONTAINER(GTK_FREQ_KNOB(widget)->buttons[i+10]), + label); + gtk_button_set_relief (GTK_BUTTON(GTK_FREQ_KNOB(widget)->buttons[i+10]), + GTK_RELIEF_NONE); + g_object_set_data (G_OBJECT (GTK_FREQ_KNOB(widget)->buttons[i+10]), + "delta", GINT_TO_POINTER(-delta)); + gtk_table_attach (GTK_TABLE (table), GTK_FREQ_KNOB(widget)->buttons[i+10], + idx[i], idx[i]+1, 2, 3, GTK_SHRINK, GTK_SHRINK, 0, 0); + g_signal_connect (GTK_FREQ_KNOB(widget)->buttons[i+10], "clicked", + G_CALLBACK (button_clicked_cb), widget); + + } + + /* Add misc labels */ + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), "<span size='xx-large'>.</span>"); + gtk_table_attach (GTK_TABLE (table), label, 5, 6, 1, 2, + GTK_SHRINK, GTK_SHRINK, 0, 0); + label = gtk_label_new (NULL); + gtk_label_set_markup (GTK_LABEL (label), "<span size='xx-large'> MHz</span>"); + gtk_table_attach (GTK_TABLE (table), label, 13, 14, 1, 2, + GTK_SHRINK, GTK_SHRINK, 0, 0); + + gtk_freq_knob_update (GTK_FREQ_KNOB(widget)); - gtk_widget_show_all (widget); + gtk_container_add (GTK_CONTAINER (widget), table); + gtk_widget_show_all (widget); return widget; } @@ -147,11 +224,13 @@ void gtk_freq_knob_set_value (GtkFreqKnob *knob, gdouble val) { - /* set the new value */ - knob->value = val; + if ((val >= knob->min) && (val <= knob->max)) { + /* set the new value */ + knob->value = val; - /* update the display */ - gtk_freq_knob_update (knob); + /* update the display */ + gtk_freq_knob_update (knob); + } } @@ -177,5 +256,41 @@ static void gtk_freq_knob_update (GtkFreqKnob *knob) { + gchar b[11]; + gchar *buff; + guint i; + g_ascii_formatd (b, 11, "%10.0f", fabs(knob->value)); + + /* set label markups */ + for (i = 0; i < 10; i++) { + buff = g_strdup_printf (FMTSTR, b[i]); + gtk_label_set_markup (GTK_LABEL(knob->digits[i]), buff); + g_free (buff); + } + } + + +/** \brief Button clicked event. + * \param button The button that was clicked. + * \param data Pointer to the GtkFreqKnob widget. + * + */ +static void +button_clicked_cb (GtkWidget *button, gpointer data) +{ + GtkFreqKnob *knob = GTK_FREQ_KNOB (data); + gdouble delta = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (button), "delta")); + + if ((delta > 0.0) && ((knob->value + delta) <= knob->max)) { + knob->value += delta; + } + else if ((delta < 0.0) && ((knob->value + delta) >= knob->min)) { + knob->value += delta; + } + + gtk_freq_knob_update (knob); + +} + Modified: trunk/src/gtk-freq-knob.h =================================================================== --- trunk/src/gtk-freq-knob.h 2008-09-05 21:57:21 UTC (rev 86) +++ trunk/src/gtk-freq-knob.h 2008-09-06 12:02:22 UTC (rev 87) @@ -60,7 +60,12 @@ struct _gtk_freq_knob { GtkVBox vbox; + + GtkWidget *digits[10]; /*!< Labels for the digits */ + GtkWidget *buttons[20]; /*!< Buttons; 0..9 up; 10..19 down */ + gdouble min; + gdouble max; gdouble value; }; Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2008-09-05 21:57:21 UTC (rev 86) +++ trunk/src/gtk-rig-ctrl.c 2008-09-06 12:02:22 UTC (rev 87) @@ -56,11 +56,10 @@ static void gtk_rig_ctrl_destroy (GtkObject *object); -static GtkWidget *create_az_widgets (GtkRigCtrl *ctrl); -static GtkWidget *create_el_widgets (GtkRigCtrl *ctrl); +static GtkWidget *create_sat_widgets (GtkRigCtrl *ctrl); +static GtkWidget *create_rig_widgets (GtkRigCtrl *ctrl); static GtkWidget *create_target_widgets (GtkRigCtrl *ctrl); static GtkWidget *create_conf_widgets (GtkRigCtrl *ctrl); -static GtkWidget *create_plot_widget (GtkRigCtrl *ctrl); static void store_sats (gpointer key, gpointer value, gpointer user_data); @@ -193,20 +192,18 @@ gdk_rgb_find_color (gtk_widget_get_colormap (widget), &ColGreen); /* create contents */ - table = gtk_table_new (3, 2, TRUE); + table = gtk_table_new (2, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 5); gtk_table_set_col_spacings (GTK_TABLE (table), 5); gtk_container_set_border_width (GTK_CONTAINER (table), 10); - gtk_table_attach (GTK_TABLE (table), create_az_widgets (GTK_RIG_CTRL (widget)), + gtk_table_attach (GTK_TABLE (table), create_sat_widgets (GTK_RIG_CTRL (widget)), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach (GTK_TABLE (table), create_el_widgets (GTK_RIG_CTRL (widget)), + gtk_table_attach (GTK_TABLE (table), create_rig_widgets (GTK_RIG_CTRL (widget)), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_table_attach (GTK_TABLE (table), create_target_widgets (GTK_RIG_CTRL (widget)), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_table_attach (GTK_TABLE (table), create_conf_widgets (GTK_RIG_CTRL (widget)), - 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach (GTK_TABLE (table), create_plot_widget (GTK_RIG_CTRL (widget)), - 1, 2, 1, 3, GTK_FILL, GTK_FILL, 0, 0); + 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_container_add (GTK_CONTAINER (widget), table); @@ -250,52 +247,45 @@ } -/** \brief Create azimuth control widgets. +/** \brief Create Satellite freq control widgets. * \param ctrl Pointer to the GtkRigCtrl widget. * * This function creates and initialises the widgets for controlling the - * azimuth of the the rigator. + * satellite frequency. * - * TODO: RENAME! */ static -GtkWidget *create_az_widgets (GtkRigCtrl *ctrl) +GtkWidget *create_sat_widgets (GtkRigCtrl *ctrl) { GtkWidget *frame; - GtkWidget *table; - GtkWidget *label; - frame = gtk_frame_new (_("Azimuth")); + frame = gtk_frame_new (_("Satellite")); - table = gtk_table_new (2, 2, FALSE); - gtk_container_set_border_width (GTK_CONTAINER (table), 5); - gtk_table_set_col_spacings (GTK_TABLE (table), 5); - gtk_table_set_row_spacings (GTK_TABLE (table), 5); - gtk_container_add (GTK_CONTAINER (frame), table); + ctrl->SatFreq = gtk_freq_knob_new (145890000.0); + gtk_container_add (GTK_CONTAINER (frame), ctrl->SatFreq); + return frame; } -/** \brief Create elevation control widgets. +/** \brief Create radio freq display widgets. * \param ctrl Pointer to the GtkRigCtrl widget. * - * This function creates and initialises the widgets for controlling the - * elevation of the the rigator. - * - * TODO: RENAME + * This function creates and initialises the widgets for displaying the + * frequency of the radio. */ static -GtkWidget *create_el_widgets (GtkRigCtrl *ctrl) +GtkWidget *create_rig_widgets (GtkRigCtrl *ctrl) { GtkWidget *frame; GtkWidget *table; GtkWidget *label; - frame = gtk_frame_new (_("Elevation")); + frame = gtk_frame_new (_("Radio")); table = gtk_table_new (2, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (table), 5); @@ -466,20 +456,6 @@ } -/** \brief Create target widgets. - * \param ctrl Pointer to the GtkRigCtrl widget. - * - * FIXME: REMOVE - */ -static -GtkWidget *create_plot_widget (GtkRigCtrl *ctrl) -{ - GtkWidget *frame; - - frame = gtk_frame_new (NULL); - - return frame; -} /** \brief Copy satellite from hash table to singly linked list. Modified: trunk/src/gtk-rig-ctrl.h =================================================================== --- trunk/src/gtk-rig-ctrl.h 2008-09-05 21:57:21 UTC (rev 86) +++ trunk/src/gtk-rig-ctrl.h 2008-09-06 12:02:22 UTC (rev 87) @@ -62,10 +62,13 @@ { GtkVBox vbox; + GtkWidget *SatFreq; /* other widgets */ - GtkWidget *DevSel; + GtkWidget *DevSel; /*!< Device selector */ + GtkWidget *LO; /*!< Local oscillator */ + GSList *sats; /*!< List of sats in parent module */ sat_t *target; /*!< Target satellite */ pass_t *pass; /*!< Next pass of target satellite */ Modified: trunk/src/gtk-rot-knob.c =================================================================== --- trunk/src/gtk-rot-knob.c 2008-09-05 21:57:21 UTC (rev 86) +++ trunk/src/gtk-rot-knob.c 2008-09-06 12:02:22 UTC (rev 87) @@ -57,6 +57,9 @@ static GtkHBoxClass *parent_class = NULL; + + + GType gtk_rot_knob_get_type () { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |