17 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 |
*/ |
*/ |
19 |
|
|
|
#ifdef HAVE_CONFIG_H |
|
|
# include <config.h> |
|
|
#endif |
|
|
|
|
20 |
#if WANT_HAMLIB |
#if WANT_HAMLIB |
21 |
#include <gtk/gtk.h> |
#include <gtk/gtk.h> |
22 |
#include <math.h> |
#include <math.h> |
27 |
#include "types.h" |
#include "types.h" |
28 |
#include "utils.h" |
#include "utils.h" |
29 |
#include "support.h" |
#include "support.h" |
|
#include "pixmaps/s0.xpm" |
|
|
#include "pixmaps/s1.xpm" |
|
|
#include "pixmaps/s2.xpm" |
|
|
#include "pixmaps/s3.xpm" |
|
|
#include "pixmaps/s4.xpm" |
|
|
#include "pixmaps/s5.xpm" |
|
|
#include "pixmaps/s6.xpm" |
|
|
#include "pixmaps/s7.xpm" |
|
|
#include "pixmaps/s8.xpm" |
|
|
#include "pixmaps/s9.xpm" |
|
|
|
|
|
typedef struct |
|
|
{ |
|
|
gchar **xpmdata; |
|
|
GdkPixmap *pixmap; |
|
|
GdkBitmap *mask; |
|
|
} |
|
|
typeLevel; |
|
|
|
|
|
typeLevel S[] = { |
|
|
{s0_xpm, NULL, NULL}, |
|
|
{s1_xpm, NULL, NULL}, |
|
|
{s2_xpm, NULL, NULL}, |
|
|
{s3_xpm, NULL, NULL}, |
|
|
{s4_xpm, NULL, NULL}, |
|
|
{s5_xpm, NULL, NULL}, |
|
|
{s6_xpm, NULL, NULL}, |
|
|
{s7_xpm, NULL, NULL}, |
|
|
{s8_xpm, NULL, NULL}, |
|
|
{s9_xpm, NULL, NULL}, |
|
|
{NULL, NULL, NULL} |
|
|
}; |
|
30 |
|
|
31 |
extern preferencestype preferences; |
extern preferencestype preferences; |
32 |
extern statetype state; |
extern statetype state; |
34 |
extern GList *riglist; |
extern GList *riglist; |
35 |
extern RIG *myrig; |
extern RIG *myrig; |
36 |
GList *rigs = NULL; |
GList *rigs = NULL; |
|
GdkPixmap *pixmap = NULL; |
|
37 |
gint svalue[10]; |
gint svalue[10]; |
38 |
|
|
39 |
/* Append a new entry in the driver list. It is called by rig_list_foreach */ |
/* Append a new entry in the driver list. It is called by rig_list_foreach */ |
66 |
for (i = 0; i < numrigs; i++) |
for (i = 0; i < numrigs; i++) |
67 |
{ |
{ |
68 |
rcaps = (struct rig_caps *) g_list_nth_data (riglist, i); |
rcaps = (struct rig_caps *) g_list_nth_data (riglist, i); |
69 |
if (g_strcasecmp (rig, rcaps->model_name) == 0) |
if (g_ascii_strcasecmp (rig, rcaps->model_name) == 0) |
70 |
break; |
break; |
71 |
} |
} |
72 |
if (i > 0) |
if (i > 0) |
75 |
return (-1); |
return (-1); |
76 |
} |
} |
77 |
|
|
|
/* load xpm data from s-meter pixmaps */ |
|
|
void |
|
|
loadsmeter (GtkWidget * widget) |
|
|
{ |
|
|
gint i = 0; |
|
|
|
|
|
while (S[i].xpmdata) |
|
|
{ |
|
|
S[i].pixmap = gdk_pixmap_create_from_xpm_d (widget->window, |
|
|
&S[i].mask, NULL, |
|
|
S[i].xpmdata); |
|
|
i++; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/* copy a s-meter pixmap to pixmap depending on the value of smax */ |
|
78 |
static void |
static void |
79 |
draw_smeter (gint value) |
draw_smeter (gint value) |
80 |
{ |
{ |
81 |
GtkWidget *drawingarea; |
GtkWidget *smeterlabel; |
82 |
GdkGC *gc; |
gchar *valtext; |
83 |
GdkRectangle rectangle; |
|
84 |
|
smeterlabel = lookup_widget(mainwindow, "smeterlabel"); |
85 |
drawingarea = lookup_widget (mainwindow, "smeterdrawingarea"); |
valtext = g_strdup_printf ("S %d", value); |
86 |
gc = drawingarea->style->fg_gc[GTK_STATE_NORMAL]; |
gtk_label_set_text (GTK_LABEL (smeterlabel), valtext); |
87 |
/* clear background */ |
g_free (valtext); |
88 |
gdk_draw_rectangle (pixmap, drawingarea->style->white_gc, TRUE, 0, 0, |
|
|
drawingarea->allocation.width, |
|
|
drawingarea->allocation.height); |
|
|
gdk_draw_pixmap (pixmap, gc, S[value].pixmap, 0, 0, 0, 0, |
|
|
drawingarea->allocation.width, |
|
|
drawingarea->allocation.height); |
|
|
rectangle.x = 0; |
|
|
rectangle.y = 0; |
|
|
rectangle.width = drawingarea->allocation.width; |
|
|
rectangle.height = drawingarea->allocation.height; |
|
|
gtk_widget_draw (drawingarea, &rectangle); /* see expose_event further down */ |
|
89 |
} |
} |
90 |
|
|
91 |
/* return string with mode */ |
/* return string with mode */ |
135 |
gint |
gint |
136 |
get_riginfo (void) |
get_riginfo (void) |
137 |
{ |
{ |
138 |
gint retcode, strength, spoint, i, smax = 0, status; |
gint retcode, strength, spoint, i, status, smax = 1; |
139 |
freq_t freq; |
freq_t freq; |
140 |
rmode_t rmode; |
rmode_t rmode; |
141 |
pbwidth_t width; |
pbwidth_t width; |
144 |
GString *digits = g_string_new (""); |
GString *digits = g_string_new (""); |
145 |
GtkWidget *frequencylabel; |
GtkWidget *frequencylabel; |
146 |
gchar *message; |
gchar *message; |
147 |
|
|
148 |
if (state.hlcounter == 0) |
if (state.hlcounter == 0) |
149 |
{ |
{ |
150 |
retcode = rig_get_freq (myrig, RIG_VFO_CURR, &freq); |
retcode = rig_get_freq (myrig, RIG_VFO_CURR, &freq); |
155 |
if ((preferences.hamlib == 2) || (preferences.hamlib == 4)) |
if ((preferences.hamlib == 2) || (preferences.hamlib == 4)) |
156 |
{ |
{ |
157 |
if (preferences.round == 0) |
if (preferences.round == 0) |
158 |
g_string_sprintf (digits, "%Ld", freq); |
g_string_printf (digits, "%Ld", freq); |
159 |
else |
else |
160 |
g_string_sprintf (digits, "%Ld", |
g_string_printf (digits, "%Ld", |
161 |
(long long) rintl (freq / |
(long long) rintl (freq / |
162 |
pow (10, |
pow (10, |
163 |
preferences. |
preferences. |
309 |
GtkWidget *mhzlabel, *mhzbutton, *bandoptionmenu, *bandentry, |
GtkWidget *mhzlabel, *mhzbutton, *bandoptionmenu, *bandentry, |
310 |
*frequencypixmap, *frequencyhbox, *frequencyhandlebox, *frequencylabel, |
*frequencypixmap, *frequencyhbox, *frequencyhandlebox, *frequencylabel, |
311 |
*modelabel, *modebutton, *modeoptionmenu, *modeentry, *rstlabel, |
*modelabel, *modebutton, *modeoptionmenu, *modeentry, *rstlabel, |
312 |
*rstbutton, *smeterhandlebox, *smeterhbox, *smeterdrawingarea, |
*rstbutton, *smeterhandlebox, *smeterhbox, *smeterlabel, |
313 |
*smeterpixmap, *powerlabel, *powerbutton, *powerhbox; |
*smeterpixmap, *powerlabel, *powerbutton, *powerhbox; |
314 |
|
|
315 |
mhzlabel = lookup_widget (mainwindow, "mhzlabel"); |
mhzlabel = lookup_widget (mainwindow, "mhzlabel"); |
331 |
frequencylabel = lookup_widget (mainwindow, "frequencylabel"); |
frequencylabel = lookup_widget (mainwindow, "frequencylabel"); |
332 |
smeterhandlebox = lookup_widget (mainwindow, "smeterhandlebox"); |
smeterhandlebox = lookup_widget (mainwindow, "smeterhandlebox"); |
333 |
smeterhbox = lookup_widget (mainwindow, "smeterhbox"); |
smeterhbox = lookup_widget (mainwindow, "smeterhbox"); |
334 |
smeterdrawingarea = lookup_widget (mainwindow, "smeterdrawingarea"); |
smeterlabel = lookup_widget (mainwindow, "smeterlabel"); |
335 |
smeterpixmap = lookup_widget (mainwindow, "smeterpixmap"); |
smeterpixmap = lookup_widget (mainwindow, "smeterpixmap"); |
336 |
|
|
337 |
if (status == 0) /* hamlib disabled */ |
if (status == 0) /* hamlib disabled */ |
353 |
gtk_widget_hide (frequencyhandlebox); |
gtk_widget_hide (frequencyhandlebox); |
354 |
gtk_widget_hide (smeterhandlebox); |
gtk_widget_hide (smeterhandlebox); |
355 |
gtk_widget_hide (smeterhbox); |
gtk_widget_hide (smeterhbox); |
356 |
gtk_widget_hide (smeterdrawingarea); |
gtk_widget_hide (smeterlabel); |
357 |
gtk_widget_hide (smeterpixmap); |
gtk_widget_hide (smeterpixmap); |
358 |
} |
} |
359 |
else if (status == 1) /* hamlib enabled */ |
else if (status == 1) /* hamlib enabled */ |
381 |
gtk_widget_hide (frequencyhandlebox); |
gtk_widget_hide (frequencyhandlebox); |
382 |
gtk_widget_hide (smeterhandlebox); |
gtk_widget_hide (smeterhandlebox); |
383 |
gtk_widget_hide (smeterhbox); |
gtk_widget_hide (smeterhbox); |
384 |
gtk_widget_hide (smeterdrawingarea); |
gtk_widget_hide (smeterlabel); |
385 |
gtk_widget_hide (smeterpixmap); |
gtk_widget_hide (smeterpixmap); |
386 |
} |
} |
387 |
else if (status == 2) /* hamlib enabled with frequency on statusbar */ |
else if (status == 2) /* hamlib enabled with frequency on statusbar */ |
409 |
gtk_widget_show (frequencyhandlebox); |
gtk_widget_show (frequencyhandlebox); |
410 |
gtk_widget_hide (smeterhandlebox); |
gtk_widget_hide (smeterhandlebox); |
411 |
gtk_widget_hide (smeterhbox); |
gtk_widget_hide (smeterhbox); |
412 |
gtk_widget_hide (smeterdrawingarea); |
gtk_widget_hide (smeterlabel); |
413 |
gtk_widget_hide (smeterpixmap); |
gtk_widget_hide (smeterpixmap); |
414 |
} |
} |
415 |
else if (status == 3) /* hamlib enabled with s-meter on statusbar */ |
else if (status == 3) /* hamlib enabled with s-meter on statusbar */ |
437 |
gtk_widget_hide (frequencyhandlebox); |
gtk_widget_hide (frequencyhandlebox); |
438 |
gtk_widget_show (smeterhandlebox); |
gtk_widget_show (smeterhandlebox); |
439 |
gtk_widget_show (smeterhbox); |
gtk_widget_show (smeterhbox); |
440 |
gtk_widget_show (smeterdrawingarea); |
gtk_widget_show (smeterlabel); |
441 |
gtk_widget_show (smeterpixmap); |
gtk_widget_show (smeterpixmap); |
442 |
} |
} |
443 |
else if (status == 4) /* hamlib enabled with frequency and s-meter on statusbar */ |
else if (status == 4) /* hamlib enabled with frequency and s-meter on statusbar */ |
465 |
gtk_widget_show (frequencyhandlebox); |
gtk_widget_show (frequencyhandlebox); |
466 |
gtk_widget_show (smeterhandlebox); |
gtk_widget_show (smeterhandlebox); |
467 |
gtk_widget_show (smeterhbox); |
gtk_widget_show (smeterhbox); |
468 |
gtk_widget_show (smeterdrawingarea); |
gtk_widget_show (smeterlabel); |
469 |
gtk_widget_show (smeterpixmap); |
gtk_widget_show (smeterpixmap); |
470 |
} |
} |
471 |
} |
} |
472 |
|
|
|
/* load s-meter pixmaps when main window is displayed */ |
|
|
void |
|
|
on_mainwindow_show (GtkWidget * widget, gpointer user_data) |
|
|
{ |
|
|
GtkWidget *drawingarea; |
|
|
|
|
|
if ((preferences.hamlib == 3) || (preferences.hamlib == 4)) |
|
|
{ |
|
|
drawingarea = lookup_widget (mainwindow, "smeterdrawingarea"); |
|
|
loadsmeter (drawingarea); |
|
|
} |
|
|
} |
|
|
|
|
|
/* create a new backing pixmap for the s-meter whenever the window is resized */ |
|
|
gboolean |
|
|
on_smeterdrawingarea_configure_event (GtkWidget * widget, |
|
|
GdkEventConfigure * event, |
|
|
gpointer user_data) |
|
|
{ |
|
|
if ((preferences.hamlib == 3) || (preferences.hamlib == 4)) |
|
|
{ |
|
|
if (pixmap) |
|
|
gdk_pixmap_unref (pixmap); |
|
|
pixmap = gdk_pixmap_new (widget->window, widget->allocation.width, |
|
|
widget->allocation.height, -1); |
|
|
} |
|
|
return FALSE; |
|
|
} |
|
|
|
|
|
/* copy the background pixmap to the drawing area for the s-meter */ |
|
|
gboolean |
|
|
on_smeterdrawingarea_expose_event (GtkWidget * widget, |
|
|
GdkEventExpose * event, gpointer user_data) |
|
|
{ |
|
|
if ((preferences.hamlib == 3) || (preferences.hamlib == 4)) |
|
|
gdk_draw_pixmap (widget->window, |
|
|
widget->style->fg_gc[GTK_WIDGET_STATE (widget)], pixmap, |
|
|
event->area.x, event->area.y, event->area.x, |
|
|
event->area.y, event->area.width, event->area.height); |
|
|
return FALSE; |
|
|
} |
|
473 |
#endif |
#endif |