From: Markus Großer <markus.grosser2+git@gmail.com>
Date: Mon, 7 May 2018 13:04:57 +0000 (+0200)
Subject: Use radio button for selecting filter board
X-Git-Url: https://git.rkrishnan.org/components/specifications/simplejson/htmlfontify-example.html?a=commitdiff_plain;h=48488844a9e653d7696a18f945a3c270761fd703;p=pihpsdr.git

Use radio button for selecting filter board

At this point, this is a purely cosmetic choice, but is meant to make it
simpler to add additional filter boards in the future. The current
(before this commit) design relied on interlocked check buttons that
emulated radio buttons with an additional off state, but doesn't
easily allow adding further filter board types.
---

diff --git a/radio_menu.c b/radio_menu.c
index d49f763..95c37eb 100644
--- a/radio_menu.c
+++ b/radio_menu.c
@@ -93,69 +93,47 @@ static void bias_cb(GtkWidget *widget, gpointer data) {
   mic_bias_enabled=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 }
 
-static void apollo_cb(GtkWidget *widget, gpointer data);
+static void load_filters(void) {
+  if(protocol==NEW_PROTOCOL) {
+    filter_board_changed();
+  }
 
-static void alex_cb(GtkWidget *widget, gpointer data) {
-  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-    if(filter_board==ALEX) {
-      filter_board=NONE;
-    } else if(filter_board==NONE) {
-      filter_board=ALEX;
-    } else if(filter_board==APOLLO) {
-      GtkWidget *w=(GtkWidget *)data;
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), FALSE);
-      filter_board=ALEX;
+  if(filter_board==ALEX || filter_board==APOLLO) {
+    BAND *band=band_get_current_band();
+    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
+    setFrequency(entry->frequency);
+    //setMode(entry->mode);
+    set_mode(active_receiver,entry->mode);
+    FILTER* band_filters=filters[entry->mode];
+    FILTER* band_filter=&band_filters[entry->filter];
+    //setFilter(band_filter->low,band_filter->high);
+    set_filter(active_receiver,band_filter->low,band_filter->high);
+    if(active_receiver->id==0) {
+      set_alex_rx_antenna(band->alexRxAntenna);
+      set_alex_tx_antenna(band->alexTxAntenna);
+      set_alex_attenuation(band->alexAttenuation);
     }
+  }
+}
 
-    if(protocol==NEW_PROTOCOL) {
-      filter_board_changed();
-    }
+static void none_cb(GtkWidget *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+    filter_board = NONE;
+    load_filters();
+  }
+}
 
-    if(filter_board==ALEX) {
-      BAND *band=band_get_current_band();
-      BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
-      setFrequency(entry->frequency);
-      //setMode(entry->mode);
-      set_mode(active_receiver,entry->mode);
-      FILTER* band_filters=filters[entry->mode];
-      FILTER* band_filter=&band_filters[entry->filter];
-      //setFilter(band_filter->low,band_filter->high);
-      set_filter(active_receiver,band_filter->low,band_filter->high);
-      if(active_receiver->id==0) {
-        set_alex_rx_antenna(band->alexRxAntenna);
-        set_alex_tx_antenna(band->alexTxAntenna);
-        set_alex_attenuation(band->alexAttenuation);
-      }
-    }
+static void alex_cb(GtkWidget *widget, gpointer data) {
+  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+    filter_board = ALEX;
+    load_filters();
   }
 }
 
 static void apollo_cb(GtkWidget *widget, gpointer data) {
   if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-    if(filter_board==APOLLO) {
-      filter_board=NONE;
-    } else if(filter_board==NONE) {
-      filter_board=APOLLO;
-    } else if(filter_board==ALEX) {
-      GtkWidget *w=(GtkWidget *)data;
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), FALSE);
-      filter_board=APOLLO;
-    }
-    if(protocol==NEW_PROTOCOL) {
-      filter_board_changed();
-    }
-
-    if(filter_board==APOLLO) {
-      BAND *band=band_get_current_band();
-      BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
-      setFrequency(entry->frequency);
-      //setMode(entry->mode);
-      set_mode(active_receiver,entry->mode);
-      FILTER* band_filters=filters[entry->mode];
-      FILTER* band_filter=&band_filters[entry->filter];
-      //setFilter(band_filter->low,band_filter->high);
-      set_filter(active_receiver,band_filter->low,band_filter->high);
-    }
+    filter_board = APOLLO;
+    load_filters;
   }
 }
 
@@ -359,16 +337,21 @@ void radio_menu(GtkWidget *parent) {
       x++;
     }
 
-    GtkWidget *alex_b=gtk_check_button_new_with_label("ALEX");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (alex_b), filter_board==ALEX);
-    gtk_grid_attach(GTK_GRID(grid),alex_b,x,1,1,1);
+    GtkWidget *none_b = gtk_radio_button_new_with_label(NULL, "NONE");
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(none_b), filter_board == NONE);
+    gtk_grid_attach(GTK_GRID(grid), none_b, x, 1, 1, 1);
+
+    GtkWidget *alex_b = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(none_b), "ALEX");
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alex_b), filter_board == ALEX);
+    gtk_grid_attach(GTK_GRID(grid), alex_b, x, 2, 1, 1);
 
-    GtkWidget *apollo_b=gtk_check_button_new_with_label("APOLLO");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (apollo_b), filter_board==APOLLO);
-    gtk_grid_attach(GTK_GRID(grid),apollo_b,x,2,1,1);
+    GtkWidget *apollo_b = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(none_b), "APOLLO");
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(apollo_b), filter_board == APOLLO);
+    gtk_grid_attach(GTK_GRID(grid), apollo_b, x, 3, 1, 1);
 
-    g_signal_connect(alex_b,"toggled",G_CALLBACK(alex_cb),apollo_b);
-    g_signal_connect(apollo_b,"toggled",G_CALLBACK(apollo_cb),alex_b);
+    g_signal_connect(none_b, "toggled", G_CALLBACK(none_cb), NULL);
+    g_signal_connect(alex_b, "toggled", G_CALLBACK(alex_cb), NULL);
+    g_signal_connect(apollo_b, "toggled", G_CALLBACK(apollo_cb), NULL);
 
     x++;
   }