28 |
#include "utils.h" |
#include "utils.h" |
29 |
#include "support.h" |
#include "support.h" |
30 |
#include "string.h" |
#include "string.h" |
31 |
|
#include "pixmaps/s0.xpm" |
32 |
|
#include "pixmaps/s1.xpm" |
33 |
|
#include "pixmaps/s2.xpm" |
34 |
|
#include "pixmaps/s3.xpm" |
35 |
|
#include "pixmaps/s4.xpm" |
36 |
|
#include "pixmaps/s5.xpm" |
37 |
|
#include "pixmaps/s6.xpm" |
38 |
|
#include "pixmaps/s7.xpm" |
39 |
|
#include "pixmaps/s8.xpm" |
40 |
|
#include "pixmaps/s9.xpm" |
41 |
|
|
42 |
|
typedef struct |
43 |
|
{ |
44 |
|
gchar **xpmdata; |
45 |
|
GdkPixmap *pixmap; |
46 |
|
GdkBitmap *mask; |
47 |
|
} |
48 |
|
typeLevel; |
49 |
|
|
50 |
|
typeLevel S[] = { |
51 |
|
{s0_xpm, NULL, NULL}, |
52 |
|
{s1_xpm, NULL, NULL}, |
53 |
|
{s2_xpm, NULL, NULL}, |
54 |
|
{s3_xpm, NULL, NULL}, |
55 |
|
{s4_xpm, NULL, NULL}, |
56 |
|
{s5_xpm, NULL, NULL}, |
57 |
|
{s6_xpm, NULL, NULL}, |
58 |
|
{s7_xpm, NULL, NULL}, |
59 |
|
{s8_xpm, NULL, NULL}, |
60 |
|
{s9_xpm, NULL, NULL}, |
61 |
|
{NULL, NULL, NULL} |
62 |
|
}; |
63 |
extern preferencestype preferences; |
extern preferencestype preferences; |
64 |
extern statetype state; |
extern statetype state; |
65 |
extern GtkWidget *mainwindow; |
extern GtkWidget *mainwindow; |
68 |
GList *riglist = NULL; |
GList *riglist = NULL; |
69 |
gint hamlibtimer = -1; |
gint hamlibtimer = -1; |
70 |
RIG *myrig; |
RIG *myrig; |
71 |
|
GdkPixmap *pixmap = NULL; |
72 |
|
|
73 |
|
/* load xpm data from s-meter pixmaps */ |
74 |
|
void |
75 |
|
loadsmeter (GtkWidget * widget) |
76 |
|
{ |
77 |
|
gint i = 0; |
78 |
|
|
79 |
|
while (S[i].xpmdata) |
80 |
|
{ |
81 |
|
S[i].pixmap = gdk_pixmap_create_from_xpm_d (widget->window, |
82 |
|
&S[i].mask, NULL, |
83 |
|
S[i].xpmdata); |
84 |
|
i++; |
85 |
|
} |
86 |
|
} |
87 |
|
|
88 |
|
/* copy a s-meter pixmap to pixmap depending on the value of smax */ |
89 |
|
static void |
90 |
|
draw_smeter (gint value) |
91 |
|
{ |
92 |
|
GtkWidget *drawingarea; |
93 |
|
|
94 |
|
drawingarea = lookup_widget (mainwindow, "smeterdrawingarea"); |
95 |
|
/* clear background */ |
96 |
|
gdk_draw_rectangle (pixmap, drawingarea->style->white_gc, TRUE, 0, 0, |
97 |
|
drawingarea->allocation.width, drawingarea->allocation.height); |
98 |
|
gdk_draw_drawable (pixmap, drawingarea->style->fg_gc[GTK_STATE_NORMAL], |
99 |
|
S[value].pixmap, 0, 0, 0, 0, |
100 |
|
drawingarea->allocation.width, drawingarea->allocation.height); |
101 |
|
gtk_widget_queue_draw_area (drawingarea, 0, 0, |
102 |
|
drawingarea->allocation.width, drawingarea->allocation.height); |
103 |
|
/* see expose_event further down */ |
104 |
|
} |
105 |
|
|
106 |
/* stop timer if used and close rig */ |
/* stop timer if used and close rig */ |
107 |
void |
void |
227 |
return (-1); |
return (-1); |
228 |
} |
} |
229 |
|
|
|
static void |
|
|
draw_smeter (gint value) |
|
|
{ |
|
|
GtkWidget *smeterlabel; |
|
|
gchar *valtext; |
|
|
|
|
|
smeterlabel = lookup_widget (mainwindow, "smeterlabel"); |
|
|
valtext = g_strdup_printf ("S %d", value); |
|
|
gtk_label_set_text (GTK_LABEL (smeterlabel), valtext); |
|
|
g_free (valtext); |
|
|
|
|
|
} |
|
|
|
|
230 |
/* return string with mode */ |
/* return string with mode */ |
231 |
gchar * |
gchar * |
232 |
rigmode (gint mode) |
rigmode (gint mode) |
460 |
*frequencypixmap, *frequencyhbox, *frequencyhandlebox, |
*frequencypixmap, *frequencyhbox, *frequencyhandlebox, |
461 |
*frequencylabel, *modelabel, *modebutton, *modeoptionmenu, |
*frequencylabel, *modelabel, *modebutton, *modeoptionmenu, |
462 |
*modeentry, *rstlabel, *rstbutton, *smeterhandlebox, |
*modeentry, *rstlabel, *rstbutton, *smeterhandlebox, |
463 |
*smeterhbox, *smeterlabel, *smeterpixmap, *powerlabel, |
*smeterhbox, *smeterdrawingarea, *smeterpixmap, *powerlabel, |
464 |
*powerbutton, *powerhbox; |
*powerbutton, *powerhbox; |
465 |
|
|
466 |
mhzlabel = lookup_widget (mainwindow, "mhzlabel"); |
mhzlabel = lookup_widget (mainwindow, "mhzlabel"); |
482 |
frequencylabel = lookup_widget (mainwindow, "frequencylabel"); |
frequencylabel = lookup_widget (mainwindow, "frequencylabel"); |
483 |
smeterhandlebox = lookup_widget (mainwindow, "smeterhandlebox"); |
smeterhandlebox = lookup_widget (mainwindow, "smeterhandlebox"); |
484 |
smeterhbox = lookup_widget (mainwindow, "smeterhbox"); |
smeterhbox = lookup_widget (mainwindow, "smeterhbox"); |
485 |
smeterlabel = lookup_widget (mainwindow, "smeterlabel"); |
smeterdrawingarea = lookup_widget (mainwindow, "smeterdrawingarea"); |
486 |
smeterpixmap = lookup_widget (mainwindow, "smeterpixmap"); |
smeterpixmap = lookup_widget (mainwindow, "smeterpixmap"); |
487 |
|
|
488 |
if (status == 0) /* hamlib disabled */ |
if (status == 0) /* hamlib disabled */ |
504 |
gtk_widget_hide (frequencyhandlebox); |
gtk_widget_hide (frequencyhandlebox); |
505 |
gtk_widget_hide (smeterhandlebox); |
gtk_widget_hide (smeterhandlebox); |
506 |
gtk_widget_hide (smeterhbox); |
gtk_widget_hide (smeterhbox); |
507 |
gtk_widget_hide (smeterlabel); |
gtk_widget_hide (smeterdrawingarea); |
508 |
gtk_widget_hide (smeterpixmap); |
gtk_widget_hide (smeterpixmap); |
509 |
} |
} |
510 |
else if (status == 1) /* hamlib enabled */ |
else if (status == 1) /* hamlib enabled */ |
526 |
gtk_widget_hide (frequencyhandlebox); |
gtk_widget_hide (frequencyhandlebox); |
527 |
gtk_widget_hide (smeterhandlebox); |
gtk_widget_hide (smeterhandlebox); |
528 |
gtk_widget_hide (smeterhbox); |
gtk_widget_hide (smeterhbox); |
529 |
gtk_widget_hide (smeterlabel); |
gtk_widget_hide (smeterdrawingarea); |
530 |
gtk_widget_hide (smeterpixmap); |
gtk_widget_hide (smeterpixmap); |
531 |
} |
} |
532 |
else if (status == 2) /* hamlib enabled with frequency on statusbar */ |
else if (status == 2) /* hamlib enabled with frequency on statusbar */ |
548 |
gtk_widget_show (frequencyhandlebox); |
gtk_widget_show (frequencyhandlebox); |
549 |
gtk_widget_hide (smeterhandlebox); |
gtk_widget_hide (smeterhandlebox); |
550 |
gtk_widget_hide (smeterhbox); |
gtk_widget_hide (smeterhbox); |
551 |
gtk_widget_hide (smeterlabel); |
gtk_widget_hide (smeterdrawingarea); |
552 |
gtk_widget_hide (smeterpixmap); |
gtk_widget_hide (smeterpixmap); |
553 |
} |
} |
554 |
else if (status == 3) /* hamlib enabled with s-meter on statusbar */ |
else if (status == 3) /* hamlib enabled with s-meter on statusbar */ |
570 |
gtk_widget_hide (frequencyhandlebox); |
gtk_widget_hide (frequencyhandlebox); |
571 |
gtk_widget_show (smeterhandlebox); |
gtk_widget_show (smeterhandlebox); |
572 |
gtk_widget_show (smeterhbox); |
gtk_widget_show (smeterhbox); |
573 |
gtk_widget_show (smeterlabel); |
gtk_widget_show (smeterdrawingarea); |
574 |
gtk_widget_show (smeterpixmap); |
gtk_widget_show (smeterpixmap); |
575 |
} |
} |
576 |
else if (status == 4) |
else if (status == 4) |
592 |
gtk_widget_show (frequencyhandlebox); |
gtk_widget_show (frequencyhandlebox); |
593 |
gtk_widget_show (smeterhandlebox); |
gtk_widget_show (smeterhandlebox); |
594 |
gtk_widget_show (smeterhbox); |
gtk_widget_show (smeterhbox); |
595 |
gtk_widget_show (smeterlabel); |
gtk_widget_show (smeterdrawingarea); |
596 |
gtk_widget_show (smeterpixmap); |
gtk_widget_show (smeterpixmap); |
597 |
} |
} |
598 |
} |
} |
611 |
g_strdelimit (digits->str, " ", '0'); |
g_strdelimit (digits->str, " ", '0'); |
612 |
return digits; |
return digits; |
613 |
} |
} |
614 |
|
|
615 |
|
/* load s-meter pixmaps when main window is displayed */ |
616 |
|
void |
617 |
|
on_mainwindow_show (GtkWidget * widget, gpointer user_data) |
618 |
|
{ |
619 |
|
GtkWidget *drawingarea; |
620 |
|
|
621 |
|
if ((preferences.hamlib == 3) || (preferences.hamlib == 4)) |
622 |
|
{ |
623 |
|
drawingarea = lookup_widget (mainwindow, "smeterdrawingarea"); |
624 |
|
loadsmeter (drawingarea); |
625 |
|
} |
626 |
|
} |
627 |
|
|
628 |
|
/* create a new backing pixmap for the s-meter whenever the window is resized */ |
629 |
|
gboolean |
630 |
|
on_smeterdrawingarea_configure_event (GtkWidget * widget, |
631 |
|
GdkEventConfigure * event, gpointer user_data) |
632 |
|
{ |
633 |
|
if ((preferences.hamlib == 3) || (preferences.hamlib == 4)) |
634 |
|
{ |
635 |
|
if (pixmap) g_object_unref (pixmap); |
636 |
|
pixmap = gdk_pixmap_new (widget->window, |
637 |
|
widget->allocation.width, widget->allocation.height, -1); |
638 |
|
} |
639 |
|
return FALSE; |
640 |
|
} |
641 |
|
|
642 |
|
/* copy the background pixmap to the drawing area for the s-meter */ |
643 |
|
gboolean |
644 |
|
on_smeterdrawingarea_expose_event (GtkWidget * widget, |
645 |
|
GdkEventExpose * event, gpointer user_data) |
646 |
|
{ |
647 |
|
if ((preferences.hamlib == 3) || (preferences.hamlib == 4)) |
648 |
|
gdk_draw_drawable (widget->window, |
649 |
|
widget->style->fg_gc[GTK_WIDGET_STATE (widget)], pixmap, |
650 |
|
event->area.x, event->area.y, event->area.x, |
651 |
|
event->area.y, event->area.width, event->area.height); |
652 |
|
return FALSE; |
653 |
|
} |
654 |
#endif |
#endif |