move gui objects into a struct

pull/5/head
Oona 2013-01-09 21:46:39 +02:00
rodzic d556f1ac5f
commit 64ac62bb05
7 zmienionych plików z 104 dodań i 107 usunięć

Wyświetl plik

@ -28,7 +28,9 @@ bool Abort = false;
pthread_t thread1;
GtkWidget *RxImage = NULL;
GuiObjs gui;
/*GtkWidget *RxImage = NULL;
GtkWidget *statusbar = NULL;
GtkWidget *vugrid = NULL;
GtkWidget *utclabel = NULL;
@ -47,7 +49,7 @@ GtkWidget *shiftspin = NULL;
GtkWidget *pwrimage = NULL;
GtkWidget *snrimage = NULL;
GtkWidget *idlabel = NULL;
GtkWidget *devstatusicon = NULL;
GtkWidget *devstatusicon = NULL;*/
GdkPixbuf *RxPixbuf = NULL;
GdkPixbuf *DispPixbuf = NULL;
@ -87,7 +89,7 @@ void delete_event() {
// Transform the NoiseAdapt toggle state into a variable
void GetAdaptive() {
Adaptive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(togadapt));
Adaptive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(gui.togadapt));
}
// Manual Start clicked
@ -111,25 +113,25 @@ void changeDevices() {
if (pcm_handle != NULL) snd_pcm_close(pcm_handle);
status = initPcmDevice(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(cardcombo)));
status = initPcmDevice(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(gui.cardcombo)));
switch(status) {
case 0:
gtk_image_set_from_stock(GTK_IMAGE(devstatusicon),GTK_STOCK_YES,GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_tooltip_text(devstatusicon, "Device successfully opened");
gtk_image_set_from_stock(GTK_IMAGE(gui.devstatusicon),GTK_STOCK_YES,GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_tooltip_text(gui.devstatusicon, "Device successfully opened");
break;
case -1:
gtk_image_set_from_stock(GTK_IMAGE(devstatusicon),GTK_STOCK_DIALOG_WARNING,GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_tooltip_text(devstatusicon, "Device was opened, but doesn't support 44100 Hz");
gtk_image_set_from_stock(GTK_IMAGE(gui.devstatusicon),GTK_STOCK_DIALOG_WARNING,GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_tooltip_text(gui.devstatusicon, "Device was opened, but doesn't support 44100 Hz");
break;
case -2:
gtk_image_set_from_stock(GTK_IMAGE(devstatusicon),GTK_STOCK_NO,GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_tooltip_text(devstatusicon, "Failed to open device");
gtk_image_set_from_stock(GTK_IMAGE(gui.devstatusicon),GTK_STOCK_NO,GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_tooltip_text(gui.devstatusicon, "Failed to open device");
break;
}
g_key_file_set_string(keyfile,"slowrx","device",gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(cardcombo)));
g_key_file_set_string(keyfile,"slowrx","device",gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(gui.cardcombo)));
pthread_create (&thread1, NULL, Listen, NULL);

Wyświetl plik

@ -21,27 +21,32 @@ extern bool Abort;
extern bool *HasSync;
extern pthread_t thread1;
extern GtkWidget *RxImage;
extern GtkWidget *statusbar;
extern GtkWidget *vugrid;
extern GtkWidget *infolabel;
extern GtkWidget *utclabel;
extern GtkWidget *lastmodelabel;
extern GtkWidget *cardcombo;
extern GtkWidget *modecombo;
extern GtkWidget *togslant;
extern GtkWidget *togsave;
extern GtkWidget *togadapt;
extern GtkWidget *togrx;
extern GtkWidget *togfsk;
extern GtkWidget *btnabort;
extern GtkWidget *btnstart;
extern GtkWidget *manualframe;
extern GtkWidget *shiftspin;
extern GtkWidget *pwrimage;
extern GtkWidget *snrimage;
extern GtkWidget *idlabel;
extern GtkWidget *devstatusicon;
typedef struct _GuiObjs GuiObjs;
struct _GuiObjs {
GtkWidget *RxImage;
GtkWidget *statusbar;
GtkWidget *vugrid;
GtkWidget *infolabel;
GtkWidget *utclabel;
GtkWidget *lastmodelabel;
GtkWidget *cardcombo;
GtkWidget *modecombo;
GtkWidget *togslant;
GtkWidget *togsave;
GtkWidget *togadapt;
GtkWidget *togrx;
GtkWidget *togfsk;
GtkWidget *btnabort;
GtkWidget *btnstart;
GtkWidget *manualframe;
GtkWidget *shiftspin;
GtkWidget *pwrimage;
GtkWidget *snrimage;
GtkWidget *idlabel;
GtkWidget *devstatusicon;
};
extern GuiObjs gui;
extern GdkPixbuf *pixbufPWR;
extern GdkPixbuf *pixbufSNR;

70
gui.c
Wyświetl plik

@ -15,12 +15,13 @@ void createGUI() {
GtkBuilder *builder;
GtkWidget *quititem, *aboutitem, *prefitem;
GtkWidget *mainwindow, *aboutdialog, *prefdialog;
GtkWidget *iconview;
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "slowrx.ui", NULL);
gtk_builder_add_from_file(builder, "aboutdialog.ui", NULL);
// gtk_builder_add_from_file(builder, "prefs.ui", NULL);
mainwindow = GTK_WIDGET(gtk_builder_get_object(builder,"mainwindow"));
aboutdialog = GTK_WIDGET(gtk_builder_get_object(builder,"aboutdialog"));
// prefdialog = GTK_WIDGET(gtk_builder_get_object(builder,"prefdialog"));
@ -29,47 +30,38 @@ void createGUI() {
// prefitem = GTK_WIDGET(gtk_builder_get_object(builder,"prefmenuitem"));
aboutitem = GTK_WIDGET(gtk_builder_get_object(builder,"aboutitem"));
vugrid = GTK_WIDGET(gtk_builder_get_object(builder,"vugrid"));
RxImage = GTK_WIDGET(gtk_builder_get_object(builder,"RxImage"));
statusbar = GTK_WIDGET(gtk_builder_get_object(builder,"statusbar"));
utclabel = GTK_WIDGET(gtk_builder_get_object(builder,"utclabel"));
lastmodelabel = GTK_WIDGET(gtk_builder_get_object(builder,"lastmodelabel"));
cardcombo = GTK_WIDGET(gtk_builder_get_object(builder,"cardcombo"));
togslant = GTK_WIDGET(gtk_builder_get_object(builder,"TogSlant"));
togsave = GTK_WIDGET(gtk_builder_get_object(builder,"TogSave"));
togadapt = GTK_WIDGET(gtk_builder_get_object(builder,"TogAdapt"));
togrx = GTK_WIDGET(gtk_builder_get_object(builder,"TogRx"));
togfsk = GTK_WIDGET(gtk_builder_get_object(builder,"TogFSK"));
modecombo = GTK_WIDGET(gtk_builder_get_object(builder,"modecombo"));
btnabort = GTK_WIDGET(gtk_builder_get_object(builder,"BtnAbort"));
btnstart = GTK_WIDGET(gtk_builder_get_object(builder,"BtnStart"));
manualframe = GTK_WIDGET(gtk_builder_get_object(builder,"ManualFrame"));
shiftspin = GTK_WIDGET(gtk_builder_get_object(builder,"ShiftSpin"));
pwrimage = GTK_WIDGET(gtk_builder_get_object(builder,"PowerImage"));
snrimage = GTK_WIDGET(gtk_builder_get_object(builder,"SNRImage"));
idlabel = GTK_WIDGET(gtk_builder_get_object(builder,"IDLabel"));
GtkWidget *iconview;
iconview = GTK_WIDGET(gtk_builder_get_object(builder,"SavedIconView"));
devstatusicon = GTK_WIDGET(gtk_builder_get_object(builder,"devstatusicon"));
gui.vugrid = GTK_WIDGET(gtk_builder_get_object(builder,"vugrid"));
gui.RxImage = GTK_WIDGET(gtk_builder_get_object(builder,"RxImage"));
gui.statusbar = GTK_WIDGET(gtk_builder_get_object(builder,"statusbar"));
gui.utclabel = GTK_WIDGET(gtk_builder_get_object(builder,"utclabel"));
gui.lastmodelabel = GTK_WIDGET(gtk_builder_get_object(builder,"lastmodelabel"));
gui.cardcombo = GTK_WIDGET(gtk_builder_get_object(builder,"cardcombo"));
gui.togslant = GTK_WIDGET(gtk_builder_get_object(builder,"TogSlant"));
gui.togsave = GTK_WIDGET(gtk_builder_get_object(builder,"TogSave"));
gui.togadapt = GTK_WIDGET(gtk_builder_get_object(builder,"TogAdapt"));
gui.togrx = GTK_WIDGET(gtk_builder_get_object(builder,"TogRx"));
gui.togfsk = GTK_WIDGET(gtk_builder_get_object(builder,"TogFSK"));
gui.modecombo = GTK_WIDGET(gtk_builder_get_object(builder,"modecombo"));
gui.btnabort = GTK_WIDGET(gtk_builder_get_object(builder,"BtnAbort"));
gui.btnstart = GTK_WIDGET(gtk_builder_get_object(builder,"BtnStart"));
gui.manualframe = GTK_WIDGET(gtk_builder_get_object(builder,"ManualFrame"));
gui.shiftspin = GTK_WIDGET(gtk_builder_get_object(builder,"ShiftSpin"));
gui.pwrimage = GTK_WIDGET(gtk_builder_get_object(builder,"PowerImage"));
gui.snrimage = GTK_WIDGET(gtk_builder_get_object(builder,"SNRImage"));
gui.idlabel = GTK_WIDGET(gtk_builder_get_object(builder,"IDLabel"));
gui.devstatusicon = GTK_WIDGET(gtk_builder_get_object(builder,"devstatusicon"));
iconview = GTK_WIDGET(gtk_builder_get_object(builder,"SavedIconView"));
g_signal_connect (quititem, "activate", G_CALLBACK(delete_event), NULL);
g_signal_connect (mainwindow, "delete-event", G_CALLBACK(delete_event), NULL);
g_signal_connect_swapped(aboutitem, "activate", G_CALLBACK(gtk_widget_show_all), aboutdialog);
// g_signal_connect_swapped(prefitem, "activate", G_CALLBACK(gtk_widget_show_all), prefdialog);
g_signal_connect_swapped(aboutdialog, "close", G_CALLBACK(gtk_widget_hide), aboutdialog);
g_signal_connect_swapped(togadapt, "toggled", G_CALLBACK(GetAdaptive), NULL);
g_signal_connect (btnstart, "clicked", G_CALLBACK(ManualStart), NULL);
g_signal_connect (btnabort, "clicked", G_CALLBACK(AbortRx), NULL);
g_signal_connect (cardcombo, "changed", G_CALLBACK(changeDevices), NULL);
//gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togslant), true);
//gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togsave), true);
//gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togadapt), true);
//gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togrx), true);
//gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(togfsk), true);
//gtk_combo_box_set_active (GTK_COMBO_BOX(modecombo), 0);
//gtk_widget_set_sensitive (btnabort, false);
g_signal_connect_swapped(gui.togadapt, "toggled", G_CALLBACK(GetAdaptive), NULL);
g_signal_connect (gui.btnstart, "clicked", G_CALLBACK(ManualStart), NULL);
g_signal_connect (gui.btnabort, "clicked", G_CALLBACK(AbortRx), NULL);
g_signal_connect (gui.cardcombo, "changed", G_CALLBACK(changeDevices), NULL);
savedstore = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
gtk_icon_view_set_model (GTK_ICON_VIEW(iconview), GTK_TREE_MODEL(savedstore));
@ -79,7 +71,7 @@ void createGUI() {
RxPixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, false, 8, 320, 256);
gdk_pixbuf_fill(RxPixbuf, 0x666666ff);
DispPixbuf = gdk_pixbuf_scale_simple (RxPixbuf, 500, 400, GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf(GTK_IMAGE(RxImage), DispPixbuf);
gtk_image_set_from_pixbuf(GTK_IMAGE(gui.RxImage), DispPixbuf);
pixbufPWR = gdk_pixbuf_new (GDK_COLORSPACE_RGB, false, 8, 100, 20);
pixbufSNR = gdk_pixbuf_new (GDK_COLORSPACE_RGB, false, 8, 100, 20);
@ -136,8 +128,8 @@ void setVU (short int PcmValue, double SNRdB) {
}
gdk_threads_enter();
gtk_image_set_from_pixbuf(GTK_IMAGE(pwrimage), pixbufPWR);
gtk_image_set_from_pixbuf(GTK_IMAGE(snrimage), pixbufSNR);
gtk_image_set_from_pixbuf(GTK_IMAGE(gui.pwrimage), pixbufPWR);
gtk_image_set_from_pixbuf(GTK_IMAGE(gui.snrimage), pixbufSNR);
gdk_threads_leave();
}

8
pcm.c
Wyświetl plik

@ -56,10 +56,10 @@ void readPcm(gint numsamples) {
void populateDeviceList() {
int card;
char *cardname;
int cardnum, numcards, row;
int numcards, row;
gdk_threads_enter();
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cardcombo), "default");
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gui.cardcombo), "default");
gdk_threads_leave();
numcards = 0;
@ -71,9 +71,9 @@ void populateDeviceList() {
row++;
snd_card_get_name(card,&cardname);
gdk_threads_enter();
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cardcombo), cardname);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gui.cardcombo), cardname);
if (strcmp(cardname,g_key_file_get_string(keyfile,"slowrx","device",NULL)) == 0)
gtk_combo_box_set_active(GTK_COMBO_BOX(cardcombo), row);
gtk_combo_box_set_active(GTK_COMBO_BOX(gui.cardcombo), row);
gdk_threads_leave();
numcards++;

Wyświetl plik

@ -71,8 +71,8 @@ void *Listen() {
while (true) {
gdk_threads_enter ();
gtk_widget_set_sensitive (vugrid, true);
gtk_widget_set_sensitive (btnabort, false);
gtk_widget_set_sensitive (gui.vugrid, true);
gtk_widget_set_sensitive (gui.btnabort, false);
gdk_threads_leave ();
HedrShift = 0;
@ -118,51 +118,51 @@ void *Listen() {
strftime(rctime, sizeof(rctime)-1, "%H:%Mz", timeptr);
snprintf(infostr, sizeof(infostr)-1, "%s, %s UTC", ModeSpec[Mode].Name, rctime);
gdk_threads_enter ();
gtk_label_set_text (GTK_LABEL(idlabel), "");
gtk_widget_set_sensitive (manualframe, false);
gtk_widget_set_sensitive (btnabort, true);
gtk_statusbar_push (GTK_STATUSBAR(statusbar), 0, "Receiving video..." );
gtk_label_set_markup (GTK_LABEL(lastmodelabel), ModeSpec[Mode].Name);
gtk_label_set_markup (GTK_LABEL(utclabel), rctime);
gtk_label_set_text (GTK_LABEL(gui.idlabel), "");
gtk_widget_set_sensitive (gui.manualframe, false);
gtk_widget_set_sensitive (gui.btnabort, true);
gtk_statusbar_push (GTK_STATUSBAR(gui.statusbar), 0, "Receiving video..." );
gtk_label_set_markup (GTK_LABEL(gui.lastmodelabel), ModeSpec[Mode].Name);
gtk_label_set_markup (GTK_LABEL(gui.utclabel), rctime);
gdk_threads_leave ();
printf(" getvideo @ %.1f Hz, Skip %d, HedrShift %d Hz\n", 44100.0, 0, HedrShift);
Finished = GetVideo(Mode, 44100, 0, false);
gdk_threads_enter ();
gtk_widget_set_sensitive (btnabort, false);
gtk_widget_set_sensitive (manualframe, true);
gtk_widget_set_sensitive (gui.btnabort, false);
gtk_widget_set_sensitive (gui.manualframe, true);
gdk_threads_leave ();
id[0] = '\0';
if (Finished && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togfsk))) {
if (Finished && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui.togfsk))) {
gdk_threads_enter ();
gtk_statusbar_push (GTK_STATUSBAR(statusbar), 0, "Receiving FSK ID..." );
gtk_statusbar_push (GTK_STATUSBAR(gui.statusbar), 0, "Receiving FSK ID..." );
gdk_threads_leave ();
GetFSK(id);
printf(" FSKID \"%s\"\n",id);
gdk_threads_enter ();
gtk_label_set_text (GTK_LABEL(idlabel), id);
gtk_label_set_text (GTK_LABEL(gui.idlabel), id);
gdk_threads_leave ();
}
snd_pcm_drop(pcm_handle);
if (Finished && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togslant))) {
if (Finished && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui.togslant))) {
// Fix slant
setVU(0,-100);
gdk_threads_enter ();
gtk_statusbar_push (GTK_STATUSBAR(statusbar), 0, "Calculating slant..." );
gtk_widget_set_sensitive (vugrid, false);
gtk_statusbar_push (GTK_STATUSBAR(gui.statusbar), 0, "Calculating slant..." );
gtk_widget_set_sensitive (gui.vugrid, false);
gdk_threads_leave ();
printf(" FindSync @ %.1f Hz\n",Rate);
Rate = FindSync(Mode, Rate, &Skip);
// Final image
gdk_threads_enter ();
gtk_statusbar_push (GTK_STATUSBAR(statusbar), 0, "Redrawing..." );
gtk_statusbar_push (GTK_STATUSBAR(gui.statusbar), 0, "Redrawing..." );
gdk_threads_leave ();
printf(" getvideo @ %.1f Hz, Skip %d, HedrShift %d Hz\n", Rate, Skip, HedrShift);
GetVideo(Mode, Rate, Skip, true);
@ -179,21 +179,19 @@ void *Listen() {
gtk_list_store_set (savedstore, &iter, 0, thumbbuf, 1, id, -1);
gdk_threads_leave ();
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(togsave))) {
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(gui.togsave))) {
// Save the raw signal
gdk_threads_enter ();
gtk_statusbar_push (GTK_STATUSBAR(statusbar), 0, "Saving..." );
gtk_statusbar_push (GTK_STATUSBAR(gui.statusbar), 0, "Saving..." );
gdk_threads_leave ();
setVU(0,-100);
ensure_dir_exists("rx-lum");
LumFile = fopen(lumfilename,"w");
if (LumFile == NULL) {
if (LumFile == NULL)
perror("Unable to open luma file for writing");
exit(EXIT_FAILURE);
}
fwrite(StoredLum,1,(ModeSpec[Mode].LineLen * ModeSpec[Mode].ImgHeight) * 44100,LumFile);
fclose(LumFile);
@ -255,7 +253,7 @@ int main(int argc, char *argv[]) {
}
confdata = g_key_file_to_data(keyfile,keylen,NULL);
fprintf(ConfFile,"%s",confdata);
// fwrite(confdata,1,(size_t)keylen,ConfFile);
fwrite(confdata,1,(size_t)keylen,ConfFile);
fclose(ConfFile);
g_object_unref(RxPixbuf);

Wyświetl plik

@ -96,7 +96,7 @@ bool GetVideo(guchar Mode, double Rate, int Skip, bool Redraw) {
500.0/ModeSpec[Mode].ImgWidth * ModeSpec[Mode].ImgHeight * ModeSpec[Mode].YScale, GDK_INTERP_BILINEAR);
gdk_threads_enter();
gtk_image_set_from_pixbuf(GTK_IMAGE(RxImage), DispPixbuf);
gtk_image_set_from_pixbuf(GTK_IMAGE(gui.RxImage), DispPixbuf);
gdk_threads_leave();
Length = ModeSpec[Mode].LineLen * ModeSpec[Mode].ImgHeight * 44100;
@ -380,7 +380,7 @@ bool GetVideo(guchar Mode, double Rate, int Skip, bool Redraw) {
500.0/ModeSpec[Mode].ImgWidth * ModeSpec[Mode].ImgHeight * ModeSpec[Mode].YScale, GDK_INTERP_BILINEAR);
gdk_threads_enter();
gtk_image_set_from_pixbuf(GTK_IMAGE(RxImage), DispPixbuf);
gtk_image_set_from_pixbuf(GTK_IMAGE(gui.RxImage), DispPixbuf);
gdk_threads_leave();
}
}

14
vis.c
Wyświetl plik

@ -40,7 +40,7 @@ guchar GetVIS () {
printf("Waiting for header\n");
gdk_threads_enter();
gtk_statusbar_push( GTK_STATUSBAR(statusbar), 0, "Ready" );
gtk_statusbar_push( GTK_STATUSBAR(gui.statusbar), 0, "Ready" );
gdk_threads_leave();
while ( true ) {
@ -132,8 +132,8 @@ guchar GetVIS () {
gdk_threads_leave();
} else {
gdk_threads_enter();
gtk_combo_box_set_active (GTK_COMBO_BOX(modecombo), VISmap[VIS]-1);
gtk_spin_button_set_value (GTK_SPIN_BUTTON(shiftspin), HedrShift);
gtk_combo_box_set_active (GTK_COMBO_BOX(gui.modecombo), VISmap[VIS]-1);
gtk_spin_button_set_value (GTK_SPIN_BUTTON(gui.shiftspin), HedrShift);
gdk_threads_leave();
break;
}
@ -143,17 +143,17 @@ guchar GetVIS () {
}
if (gotvis)
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togrx))) break;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui.togrx))) break;
// Manual start
if (ManualActivated) {
gdk_threads_enter();
gtk_widget_set_sensitive( manualframe, false );
gtk_widget_set_sensitive( gui.manualframe, false );
gdk_threads_leave();
selmode = gtk_combo_box_get_active (GTK_COMBO_BOX(modecombo)) + 1;
HedrShift = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(shiftspin));
selmode = gtk_combo_box_get_active (GTK_COMBO_BOX(gui.modecombo)) + 1;
HedrShift = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(gui.shiftspin));
VIS = 0;
for (i=0; i<0x80; i++) {
if (VISmap[i] == selmode) {