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