]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
Converted long lists of radio buttons to combo-boxes, to
authorc vw <dl1ycf@darc.de>
Wed, 12 Jan 2022 17:18:02 +0000 (18:18 +0100)
committerc vw <dl1ycf@darc.de>
Wed, 12 Jan 2022 17:18:02 +0000 (18:18 +0100)
save some space on the screen.

radio_menu.c

index 0467e64c17b171fb27c0212534cfacb0e5ef2429..a479821034c5968e9035f40049c1169f988deab8 100644 (file)
@@ -58,8 +58,6 @@ static GtkWidget *tx_gains[2];
 static GtkWidget *sat_b;
 static GtkWidget *rsat_b;
 
-static GtkWidget *receivers_1;
-static GtkWidget *receivers_2;
 static GtkWidget *duplex_b;
 static GtkWidget *mute_rx_b;
 
@@ -111,6 +109,7 @@ static void rx_gain_value_changed_cb(GtkWidget *widget, gpointer data) {
 static void drive_gain_value_changed_cb(GtkWidget *widget, gpointer data) {
   DAC *dac=(DAC *)data;
   if(radio->device==SOAPYSDR_USB_DEVICE) {
+    // should use setDrive here to move the main drive slider
     transmitter->drive=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
     soapy_protocol_set_tx_gain(transmitter,(double)transmitter->drive);
 /*
@@ -322,70 +321,70 @@ static void none_cb(GtkWidget *widget, gpointer data) {
   }
 }
 
-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))) {
-    filter_board = APOLLO;
-    load_filters();
-  }
-}
-
-static void charly25_cb(GtkWidget *widget, gpointer data) {
-  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-    filter_board = CHARLY25;
-    load_filters();
+static void filter_cb(GtkWidget *widget, gpointer data) {
+  int val = gtk_combo_box_get_active (GTK_COMBO_BOX(widget));
+  switch (val) {
+  case 0:
+  default:
+    filter_board=NONE;
+    break;
+  case 1:
+    filter_board=ALEX;
+    break;
+  case 2:
+    filter_board=APOLLO;
+    break;
+  case 3:
+    filter_board=CHARLY25;
+    break;
+  case 4:
+    filter_board=N2ADR;
+    break;
   }
+  load_filters();
 }
 
-static void n2adr_cb(GtkWidget *widget, gpointer data) {
-  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-    filter_board = N2ADR;
-    load_filters();
-  }
-}
-
-
 static void sample_rate_cb(GtkToggleButton *widget, gpointer data) {
-  if(gtk_toggle_button_get_active(widget)) {
-#ifdef CLIENT_SERVER
-    if(radio_is_remote) {
-      send_sample_rate(client_socket,-1,GPOINTER_TO_INT(data));
-    } else {
-#endif
-      radio_change_sample_rate(GPOINTER_TO_INT(data));
-    }
+  char *p = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
+  int samplerate;
+
+  //
+  // There are so many different possibilities for sample rates, so
+  // we just "scanf" from the combobox text entry
+  //
+  if (sscanf(p, "%d", &samplerate) != 1) return;
 #ifdef CLIENT_SERVER
+  if(radio_is_remote)
+  {
+    send_sample_rate(client_socket,-1,samplerate);
   }
+  else
 #endif
+  {
+    radio_change_sample_rate(samplerate);
+  }
 }
 
 static void receivers_cb(GtkToggleButton *widget, gpointer data) {
+  int val=gtk_combo_box_get_active (GTK_COMBO_BOX(widget))+1;
   //
   // reconfigure_radio requires that the RX panels are active
   // (segfault otherwise), therefore ignore this while TXing
   //
   if (isTransmitting()) {
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (receivers_1), receivers==1);
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (receivers_2), receivers==2);
+    gtk_combo_box_set_active(GTK_COMBO_BOX(widget),receivers - 1);
     return;
   }
-  if(gtk_toggle_button_get_active(widget)) {
-#ifdef CLIENT_SERVER
-    if(radio_is_remote) {
-      send_receivers(client_socket,GPOINTER_TO_INT(data));
-    } else {
-#endif
-      radio_change_receivers(GPOINTER_TO_INT(data));
 #ifdef CLIENT_SERVER
+    if(radio_is_remote)
+    {
+      send_receivers(client_socket,val);
     }
+    else
 #endif
-  }
+    {
+      radio_change_receivers(val);
+    }
 }
 
 static void region_cb(GtkWidget *widget, gpointer data) {
@@ -393,23 +392,35 @@ static void region_cb(GtkWidget *widget, gpointer data) {
 }
 
 static void rit_cb(GtkWidget *widget,gpointer data) {
-  rit_increment=GPOINTER_TO_INT(data);
+  int val = gtk_combo_box_get_active (GTK_COMBO_BOX(widget));
+  switch (val) {
+    case 0:
+    default:
+      rit_increment=1;
+      break;
+    case 1:
+      rit_increment=10;
+      break;
+    case 2:
+      rit_increment=100;
+      break;
+  }
 }
 
 static void ck10mhz_cb(GtkWidget *widget, gpointer data) {
-  atlas_clock_source_10mhz = GPOINTER_TO_INT(data);
+  atlas_clock_source_10mhz = gtk_combo_box_get_active (GTK_COMBO_BOX(widget));
 }
 
 static void ck128mhz_cb(GtkWidget *widget, gpointer data) {
-  atlas_clock_source_128mhz=atlas_clock_source_128mhz==1?0:1;
+  atlas_clock_source_128mhz=gtk_combo_box_get_active (GTK_COMBO_BOX(widget)) ? 1 : 0;
 }
 
 static void micsource_cb(GtkWidget *widget, gpointer data) {
-  atlas_mic_source=atlas_mic_source==1?0:1;
+  atlas_mic_source=gtk_combo_box_get_active (GTK_COMBO_BOX(widget)) ? 1 : 0;
 }
 
-static void penelopetx_cb(GtkWidget *widget, gpointer data) {
-  atlas_penelope=GPOINTER_TO_INT(data);
+static void tx_cb(GtkWidget *widget, gpointer data) {
+  atlas_penelope=gtk_combo_box_get_active (GTK_COMBO_BOX(widget));
 }
 
 void radio_menu(GtkWidget *parent) {
@@ -472,239 +483,196 @@ void radio_menu(GtkWidget *parent) {
   gtk_grid_attach(GTK_GRID(grid),receivers_label,col,row,1,1);
 
   row++;
-  
-  receivers_1=gtk_radio_button_new_with_label(NULL,"1");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (receivers_1), receivers==1);
-  gtk_grid_attach(GTK_GRID(grid),receivers_1,col,row,1,1);
-  g_signal_connect(receivers_1,"toggled",G_CALLBACK(receivers_cb),(gpointer *)1);
-
-  row++;
-
+  GtkWidget *receivers_combo=gtk_combo_box_text_new();
+  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(receivers_combo),NULL,"1");
   if(radio->supported_receivers>1) {
-    receivers_2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(receivers_1),"2");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (receivers_2), receivers==2);
-    gtk_grid_attach(GTK_GRID(grid),receivers_2,col,row,1,1);
-    g_signal_connect(receivers_2,"toggled",G_CALLBACK(receivers_cb),(gpointer *)2);
-    row++;
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(receivers_combo),NULL,"2");
   }
+  gtk_combo_box_set_active(GTK_COMBO_BOX(receivers_combo),receivers - 1);
+  gtk_grid_attach(GTK_GRID(grid),receivers_combo,col,row,1,1);
+  g_signal_connect(receivers_combo,"changed",G_CALLBACK(receivers_cb),NULL);
+  
+  row++;
 
-  col++;
-  if(row>temp_row) temp_row=row;
-
-  row=1;
+  GtkWidget *sample_rate_label=gtk_label_new(NULL);
+  gtk_label_set_markup(GTK_LABEL(sample_rate_label), "<b>Sample Rate:</b>");
+  gtk_grid_attach(GTK_GRID(grid),sample_rate_label,col,row,1,1);
+  row++;
 
+  GtkWidget *sample_rate_combo_box=gtk_combo_box_text_new();
   switch(protocol) {
     case ORIGINAL_PROTOCOL:
-      {
-      GtkWidget *sample_rate_label=gtk_label_new(NULL);
-      gtk_label_set_markup(GTK_LABEL(sample_rate_label), "<b>Sample Rate:</b>");
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_label,col,row,1,1);
-      row++;
-
-      GtkWidget *sample_rate_48=gtk_radio_button_new_with_label(NULL,"48000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_48), active_receiver->sample_rate==48000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_48,col,row,1,1);
-      g_signal_connect(sample_rate_48,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)48000);
-      row++;
-
-      GtkWidget *sample_rate_96=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_48),"96000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_96), active_receiver->sample_rate==96000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_96,col,row,1,1);
-      g_signal_connect(sample_rate_96,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)96000);
-      row++;
-
-      GtkWidget *sample_rate_192=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_96),"192000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_192), active_receiver->sample_rate==192000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_192,col,row,1,1);
-      g_signal_connect(sample_rate_192,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)192000);
-      row++;
-
-      GtkWidget *sample_rate_384=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_192),"384000");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_384), active_receiver->sample_rate==384000);
-      gtk_grid_attach(GTK_GRID(grid),sample_rate_384,col,row,1,1);
-      g_signal_connect(sample_rate_384,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)384000);
-      row++;
-
+    case NEW_PROTOCOL:
+      gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"48000");
+      gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"96000");
+      gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"192000");
+      gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"384000");
       if(protocol==NEW_PROTOCOL) {
-        GtkWidget *sample_rate_768=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_384),"768000");
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_768), active_receiver->sample_rate==768000);
-        gtk_grid_attach(GTK_GRID(grid),sample_rate_768,col,row,1,1);
-        g_signal_connect(sample_rate_768,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)768000);
-        row++;
-  
-        GtkWidget *sample_rate_1536=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sample_rate_768),"1536000");
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate_1536), active_receiver->sample_rate==1536000);
-        gtk_grid_attach(GTK_GRID(grid),sample_rate_1536,col,row,1,1);
-        g_signal_connect(sample_rate_1536,"toggled",G_CALLBACK(sample_rate_cb),(gpointer *)1536000);
-        row++;
-  
-#ifdef GPIO
-        gtk_widget_set_sensitive(sample_rate_768,FALSE);
-        gtk_widget_set_sensitive(sample_rate_1536,FALSE);
+#ifndef GPIO
+        // seems that these very high sample rates cannot be handled if using GPIO
+        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"768000");
+        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"1536000");
 #endif
       }
-      col++;
+      switch (active_receiver->sample_rate) {
+         case 48000:
+            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),0);
+           break;
+         case 96000:
+            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),1);
+           break;
+         case 192000:
+            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),2);
+           break;
+         case 384000:
+#ifdef GPIO
+         case 768000:
+         case 1536000:
+#endif
+            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),3);
+           break;
+#ifndef GPIO
+         case 768000:
+            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),4);
+           break;
+         case 1536000:
+            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),5);
+           break;
+#endif
       }
       break;
-  
+
 #ifdef SOAPYSDR
     case SOAPYSDR_PROTOCOL:
       if(strcmp(radio->name,"sdrplay")==0) {
-        GtkWidget *sample_rate_combo_box=gtk_combo_box_text_new();
+        // It seems that only one does work ?
+        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"768000");
+        gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),0);
+
 //        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"96000");
 //        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"192000");
 //        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"384000");
-        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"768000");
-        switch(radio_sample_rate) {
-          case 96000:
-            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),0);
-            break;
-          case 192000:
-            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),1);
-            break;
-          case 384000:
-            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),2);
-            break;
-          case 768000:
-            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),3);
-            break;
-        }
-        g_signal_connect(sample_rate_combo_box,"changed",G_CALLBACK(sample_rate_cb),radio);
-        gtk_grid_attach(GTK_GRID(grid),sample_rate_combo_box,col,row,1,1);
-       row++;
+//        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,"768000");
+//        switch(radio_sample_rate) {
+//          case 96000:
+//            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),0);
+//            break;
+//          case 192000:
+//            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),1);
+//            break;
+//          case 384000:
+//            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),2);
+//            break;
+//          case 768000:
+//            gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),3);
+//            break;
+//     }
       } else {
-        GtkWidget *sample_rate_label=gtk_label_new(NULL);
-        gtk_label_set_markup(GTK_LABEL(sample_rate_label), "<b>Sample Rate:</b>");
-        gtk_grid_attach(GTK_GRID(grid),sample_rate_label,col,row,1,1);
-        row++;
 
+        // There is only one sample rate and this we write into the combobox
         char rate[16];
         sprintf(rate,"%d",radio->info.soapy.sample_rate);
 
-        GtkWidget *sample_rate=gtk_radio_button_new_with_label(NULL,rate);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sample_rate), radio->info.soapy.sample_rate);
-        gtk_grid_attach(GTK_GRID(grid),sample_rate,col,row,1,1);
-        g_signal_connect(sample_rate,"toggled",G_CALLBACK(sample_rate_cb),GINT_TO_POINTER(radio->info.soapy.sample_rate));
-
-        col++;
+        gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sample_rate_combo_box),NULL,rate);
+        gtk_combo_box_set_active(GTK_COMBO_BOX(sample_rate_combo_box),0);
       }
       break;
 #endif
 
   }
+  gtk_grid_attach(GTK_GRID(grid),sample_rate_combo_box,col,row,1,1);
+  g_signal_connect(sample_rate_combo_box,"changed",G_CALLBACK(sample_rate_cb),NULL);
   row++;
   if(row>temp_row) temp_row=row;
 
 
+  col++,
   row=1;
 
-  if(protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL) {
+  GtkWidget *rit_label=gtk_label_new(NULL);
+  gtk_label_set_markup(GTK_LABEL(rit_label), "<b>RIT/XIT step (Hz):</b>");
+  gtk_grid_attach(GTK_GRID(grid),rit_label,col,row,1,1);
+  row++;
 
-    if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) ||
-       (protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION2) ||
-       (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION) ||
-       (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION2)) {
 
-      GtkWidget *ptt_ring_b=gtk_radio_button_new_with_label(NULL,"PTT On Ring, Mic and Bias on Tip");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0);
-      gtk_grid_attach(GTK_GRID(grid),ptt_ring_b,col,row,1,1);
-      g_signal_connect(ptt_ring_b,"toggled",G_CALLBACK(ptt_ring_cb),NULL);
-      row++;
+  GtkWidget *rit_combo=gtk_combo_box_text_new();
+  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(rit_combo),NULL,"1");
+  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(rit_combo),NULL,"10");
+  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(rit_combo),NULL,"100");
 
-      GtkWidget *ptt_tip_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ptt_ring_b),"PTT On Tip, Mic and Bias on Ring");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1);
-      gtk_grid_attach(GTK_GRID(grid),ptt_tip_b,col,row,1,1);
-      g_signal_connect(ptt_tip_b,"toggled",G_CALLBACK(ptt_tip_cb),NULL);
-      row++;
+  switch (rit_increment) {
+    default:
+      rit_increment=1;
+      // fallthrough
+    case 1:
+      gtk_combo_box_set_active(GTK_COMBO_BOX(rit_combo),0);
+      break;
+    case 10:
+      gtk_combo_box_set_active(GTK_COMBO_BOX(rit_combo),1);
+      break;
+    case 100:
+      gtk_combo_box_set_active(GTK_COMBO_BOX(rit_combo),2);
+      break;
+  }
+  gtk_grid_attach(GTK_GRID(grid), rit_combo, col, row, 1, 1);
+  g_signal_connect(rit_combo,"changed",G_CALLBACK(rit_cb),NULL);
+  row++;
 
-      GtkWidget *ptt_b=gtk_check_button_new_with_label("PTT Enabled");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled);
-      gtk_grid_attach(GTK_GRID(grid),ptt_b,col,row,1,1);
-      g_signal_connect(ptt_b,"toggled",G_CALLBACK(ptt_cb),NULL);
-      row++;
+  GtkWidget *sat_label=gtk_label_new(NULL);
+  gtk_label_set_markup(GTK_LABEL(sat_label), "<b>SAT mode:</b>");
+  gtk_grid_attach(GTK_GRID(grid),sat_label,col,row,1,1);
+  row++;
 
-      GtkWidget *bias_b=gtk_check_button_new_with_label("BIAS Enabled");
-      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled);
-      gtk_grid_attach(GTK_GRID(grid),bias_b,col,row,1,1);
-      g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL);
-      row++;
+  GtkWidget *sat_combo=gtk_combo_box_text_new();
+  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sat_combo),NULL,"SAT Off");
+  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sat_combo),NULL,"SAT");
+  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sat_combo),NULL,"RSAT");
+  gtk_combo_box_set_active(GTK_COMBO_BOX(sat_combo),sat_mode);
+  gtk_grid_attach(GTK_GRID(grid),sat_combo,col,row,1,1);
+  g_signal_connect(sat_combo,"changed",G_CALLBACK(sat_cb),NULL);
+  row++;
 
-      if(row>temp_row) temp_row=row;
-      col++;
-    }
+  if(row>temp_row) temp_row=row;
+  
+  col++;
+  row=1;
 
-    row=1;
+  if(protocol==ORIGINAL_PROTOCOL || protocol==NEW_PROTOCOL) {
 
     GtkWidget *filter_board_label=gtk_label_new(NULL);
     gtk_label_set_markup(GTK_LABEL(filter_board_label), "<b>Filter Board:</b>");
     gtk_grid_attach(GTK_GRID(grid),filter_board_label,col,row,1,1);
     row++;
 
-    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, col, row, 1, 1);
-    row++;
-
-    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, col, row, 1, 1);
-    row++;
-
-    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, col, row, 1, 1);
-    row++;
-
-    GtkWidget *charly25_b = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(none_b), "CHARLY25");
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(charly25_b), filter_board==CHARLY25);
-    gtk_grid_attach(GTK_GRID(grid), charly25_b, col, row, 1, 1);
-    row++;
+    GtkWidget *filter_combo=gtk_combo_box_text_new();
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(filter_combo),NULL,"NONE");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(filter_combo),NULL,"ALEX");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(filter_combo),NULL,"APOLLO");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(filter_combo),NULL,"CHARLY25");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(filter_combo),NULL,"N2ADR");
+
+    switch (filter_board) {
+      case NONE:
+       gtk_combo_box_set_active(GTK_COMBO_BOX(filter_combo),0);
+      case ALEX:
+       gtk_combo_box_set_active(GTK_COMBO_BOX(filter_combo),1);
+      case APOLLO:
+       gtk_combo_box_set_active(GTK_COMBO_BOX(filter_combo),2);
+      case CHARLY25:
+       gtk_combo_box_set_active(GTK_COMBO_BOX(filter_combo),3);
+        break;
+      case N2ADR:
+       gtk_combo_box_set_active(GTK_COMBO_BOX(filter_combo),4);
+        break;
+    }
+    gtk_grid_attach(GTK_GRID(grid), filter_combo, col, row, 1, 1);
+    g_signal_connect(filter_combo,"changed",G_CALLBACK(filter_cb),NULL);
 
-    GtkWidget *n2adr_b = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(none_b), "N2ADR");
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(n2adr_b), filter_board==N2ADR);
-    gtk_grid_attach(GTK_GRID(grid), n2adr_b, col, row, 1, 1);
     row++;
 
-    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);
-    g_signal_connect(charly25_b, "toggled", G_CALLBACK(charly25_cb), NULL);
-    g_signal_connect(n2adr_b, "toggled", G_CALLBACK(n2adr_cb), NULL);
-
-    if(row>temp_row) temp_row=row;
-    col++;
   }
 
-  row=1;
-
-  GtkWidget *rit_label=gtk_label_new(NULL);
-  gtk_label_set_markup(GTK_LABEL(rit_label), "<b>RIT/XIT step (Hz):</b>");
-  gtk_grid_attach(GTK_GRID(grid),rit_label,col,row,1,1);
-  row++;
-
-  GtkWidget *rit_1=gtk_radio_button_new_with_label(NULL,"1");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rit_1), rit_increment==1);
-  gtk_grid_attach(GTK_GRID(grid),rit_1,col,row,1,1);
-  g_signal_connect(rit_1,"pressed",G_CALLBACK(rit_cb),(gpointer *)1);
-  row++;
-
-  GtkWidget *rit_10=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(rit_1),"10");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rit_10), rit_increment==10);
-  gtk_grid_attach(GTK_GRID(grid),rit_10,col,row,1,1);
-  g_signal_connect(rit_10,"pressed",G_CALLBACK(rit_cb),(gpointer *)10);
-  row++;
-
-  GtkWidget *rit_100=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(rit_10),"100");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rit_100), rit_increment==100);
-  gtk_grid_attach(GTK_GRID(grid),rit_100,col,row,1,1);
-  g_signal_connect(rit_100,"pressed",G_CALLBACK(rit_cb),(gpointer *)100);
-  row++;
-
-  if(row>temp_row) temp_row=row;
-  col++;
-  row=1;
-
-#ifdef GPIO
+//#ifdef GPIO
   GtkWidget *vfo_divisor_label=gtk_label_new(NULL);
   gtk_label_set_markup(GTK_LABEL(vfo_divisor_label), "<b>VFO Encoder Divisor:</b>");
   gtk_grid_attach(GTK_GRID(grid),vfo_divisor_label,col,row,1,1);
@@ -715,82 +683,119 @@ void radio_menu(GtkWidget *parent) {
   gtk_grid_attach(GTK_GRID(grid),vfo_divisor,col,row,1,1);
   g_signal_connect(vfo_divisor,"value_changed",G_CALLBACK(vfo_divisor_value_changed_cb),NULL);
   row++;
-#endif
+//#endif
    
-  GtkWidget *iqswap_b=gtk_check_button_new_with_label("Swap IQ");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (iqswap_b), iqswap);
-  gtk_grid_attach(GTK_GRID(grid),iqswap_b,col,row,1,1);
-  g_signal_connect(iqswap_b,"toggled",G_CALLBACK(iqswap_cb),NULL);
-  row++;
-
   if(row>temp_row) temp_row=row;
 
-  col++;
-
 #ifdef USBOZY
   if (protocol==ORIGINAL_PROTOCOL && (device == DEVICE_OZY || device == DEVICE_METIS))
 #else
   if (protocol==ORIGINAL_PROTOCOL && radio->device == DEVICE_METIS)
 #endif
   {
+    col++;
     row=1;
     GtkWidget *atlas_label=gtk_label_new(NULL);
-    gtk_label_set_markup(GTK_LABEL(atlas_label), "<b>Atlas bus:</b>");
-    gtk_grid_attach(GTK_GRID(grid),atlas_label,col,row,1,1);
+    gtk_label_set_markup(GTK_LABEL(atlas_label), "<b>ATLAS bus settings:</b>");
+    gtk_grid_attach(GTK_GRID(grid),atlas_label,col,row,2,1);
     row++;
 
-    // Possibly "fuse" the 10Mhz Atlas buttons in one drop-down
-    GtkWidget *ck10mhz_1=gtk_radio_button_new_with_label(NULL,"10MHz clock=Atlas");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ck10mhz_1), atlas_clock_source_10mhz==0);
-    gtk_grid_attach(GTK_GRID(grid),ck10mhz_1,col,row,1,1);
-    g_signal_connect(ck10mhz_1,"toggled",G_CALLBACK(ck10mhz_cb),(gpointer *)0);
-    row++;
+    GtkWidget *clock10_label=gtk_label_new(NULL);
+    gtk_label_set_markup(GTK_LABEL(clock10_label), "<b>10 MHz source:</b>");
+    gtk_grid_attach(GTK_GRID(grid),clock10_label,col,row,1,1);
 
-    GtkWidget *ck10mhz_2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ck10mhz_1),"10MHz clock=Penelope");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ck10mhz_2), atlas_clock_source_10mhz==1);
-    gtk_grid_attach(GTK_GRID(grid),ck10mhz_2,col,row,1,1);
-    g_signal_connect(ck10mhz_2,"toggled",G_CALLBACK(ck10mhz_cb),(gpointer *)1);
-    row++;
 
-    GtkWidget *ck10mhz_3=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ck10mhz_2),"10MHz clock=Mercury");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ck10mhz_3), atlas_clock_source_10mhz==2);
-    gtk_grid_attach(GTK_GRID(grid),ck10mhz_3,col,row,1,1);
-    g_signal_connect(ck10mhz_3,"toggled",G_CALLBACK(ck10mhz_cb),(gpointer *)2);
-    row++;
+    GtkWidget *ck10mhz_combo=gtk_combo_box_text_new();
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ck10mhz_combo),NULL,"Atlas");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ck10mhz_combo),NULL,"Penelope");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ck10mhz_combo),NULL,"Mercury");
+    gtk_combo_box_set_active(GTK_COMBO_BOX(ck10mhz_combo),atlas_clock_source_10mhz);
+    gtk_grid_attach(GTK_GRID(grid),ck10mhz_combo,col+1,row,1,1);
+    g_signal_connect(ck10mhz_combo,"changed",G_CALLBACK(ck10mhz_cb),NULL);
 
-    GtkWidget *ck128_b=gtk_check_button_new_with_label("122.88MHz ck=Mercury");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ck128_b), atlas_clock_source_128mhz);
-    gtk_grid_attach(GTK_GRID(grid),ck128_b,col,row,1,1);
-    g_signal_connect(ck128_b,"toggled",G_CALLBACK(ck128mhz_cb),NULL);
     row++;
 
-    GtkWidget *mic_src_b=gtk_check_button_new_with_label("Mic src=Penelope");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mic_src_b), atlas_mic_source);
-    gtk_grid_attach(GTK_GRID(grid),mic_src_b,col,row,1,1);
-    g_signal_connect(mic_src_b,"toggled",G_CALLBACK(micsource_cb),NULL);
-    row++;
+    GtkWidget *clock128_label=gtk_label_new(NULL);
+    gtk_label_set_markup(GTK_LABEL(clock128_label), "<b>122.88 MHz source:</b>");
+    gtk_grid_attach(GTK_GRID(grid),clock128_label,col,row,1,1);
+
+    GtkWidget *ck128mhz_combo=gtk_combo_box_text_new();
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ck128mhz_combo),NULL,"Penelope");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ck128mhz_combo),NULL,"Mercury");
+    gtk_combo_box_set_active(GTK_COMBO_BOX(ck128mhz_combo),atlas_clock_source_128mhz ? 1 : 0);
+    gtk_grid_attach(GTK_GRID(grid),ck128mhz_combo,col+1,row,1,1);
+    g_signal_connect(ck128mhz_combo,"changed",G_CALLBACK(ck128mhz_cb),NULL);
 
-    // Possibly "fuse" the TX buttons in one drop-down
-    GtkWidget *penelopetx_1=gtk_radio_button_new_with_label(NULL,"No TX");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (penelopetx_1), atlas_penelope==0);
-    gtk_grid_attach(GTK_GRID(grid),penelopetx_1,col,row,1,1);
-    g_signal_connect(penelopetx_1,"toggled",G_CALLBACK(penelopetx_cb),(gpointer *)0);
     row++;
 
-    GtkWidget *penelopetx_2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(penelopetx_1),"Penelope TX");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (penelopetx_2), atlas_penelope==1);
-    gtk_grid_attach(GTK_GRID(grid),penelopetx_2,col,row,1,1);
-    g_signal_connect(penelopetx_2,"toggled",G_CALLBACK(penelopetx_cb),(gpointer *)1);
+    GtkWidget *micsource_label=gtk_label_new(NULL);
+    gtk_label_set_markup(GTK_LABEL(micsource_label), "<b>Mic source:</b>");
+    gtk_grid_attach(GTK_GRID(grid),micsource_label,col,row,1,1);
+
+    GtkWidget *micsource_combo=gtk_combo_box_text_new();
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(micsource_combo),NULL,"Janus");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(micsource_combo),NULL,"Penelope");
+    gtk_combo_box_set_active(GTK_COMBO_BOX(micsource_combo),atlas_mic_source ? 1 : 0);
+    gtk_grid_attach(GTK_GRID(grid),micsource_combo,col+1,row,1,1);
+    g_signal_connect(micsource_combo,"changed",G_CALLBACK(micsource_cb),NULL);
+
     row++;
 
-    GtkWidget *penelopetx_3=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(penelopetx_1),"Pennylane TX");
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (penelopetx_3), atlas_penelope==2);
-    gtk_grid_attach(GTK_GRID(grid),penelopetx_3,col,row,1,1);
-    g_signal_connect(penelopetx_3,"toggled",G_CALLBACK(penelopetx_cb),(gpointer *)2);
+    GtkWidget *tx_label=gtk_label_new(NULL);
+    gtk_label_set_markup(GTK_LABEL(tx_label), "<b>TX config:</b>");
+    gtk_grid_attach(GTK_GRID(grid),tx_label,col,row,1,1);
+
+    GtkWidget *tx_combo=gtk_combo_box_text_new();
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(tx_combo),NULL,"No TX");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(tx_combo),NULL,"Penelope");
+    gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(tx_combo),NULL,"Pennylane");
+    gtk_combo_box_set_active(GTK_COMBO_BOX(tx_combo),atlas_penelope);
+    gtk_grid_attach(GTK_GRID(grid),tx_combo,col+1,row,1,1);
+    g_signal_connect(tx_combo,"changed",G_CALLBACK(tx_cb),NULL);
+
     row++;
 
     if(row>temp_row) temp_row=row;
   }
+  if((protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION) ||
+     (protocol==NEW_PROTOCOL && device==NEW_DEVICE_ORION2) ||
+     (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION) ||
+     (protocol==ORIGINAL_PROTOCOL && device==DEVICE_ORION2)) {
+
+      col++;
+      row=1;
+
+      GtkWidget *orion_label=gtk_label_new(NULL);
+      gtk_label_set_markup(GTK_LABEL(orion_label), "<b>Orion(2) Mic jack:</b>");
+      gtk_grid_attach(GTK_GRID(grid),orion_label,col,row,2,1);
+      row++;
+
+      GtkWidget *ptt_ring_b=gtk_radio_button_new_with_label(NULL,"PTT On Ring, Mic and Bias on Tip");
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_ring_b), mic_ptt_tip_bias_ring==0);
+      gtk_grid_attach(GTK_GRID(grid),ptt_ring_b,col,row,2,1);
+      g_signal_connect(ptt_ring_b,"toggled",G_CALLBACK(ptt_ring_cb),NULL);
+      row++;
+
+      GtkWidget *ptt_tip_b=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(ptt_ring_b),"PTT On Tip, Mic and Bias on Ring");
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_tip_b), mic_ptt_tip_bias_ring==1);
+      gtk_grid_attach(GTK_GRID(grid),ptt_tip_b,col,row,2,1);
+      g_signal_connect(ptt_tip_b,"toggled",G_CALLBACK(ptt_tip_cb),NULL);
+      row++;
+
+      GtkWidget *ptt_b=gtk_check_button_new_with_label("PTT Enabled");
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptt_b), mic_ptt_enabled);
+      gtk_grid_attach(GTK_GRID(grid),ptt_b,col,row,2,1);
+      g_signal_connect(ptt_b,"toggled",G_CALLBACK(ptt_cb),NULL);
+      row++;
+
+      GtkWidget *bias_b=gtk_check_button_new_with_label("BIAS Enabled");
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bias_b), mic_bias_enabled);
+      gtk_grid_attach(GTK_GRID(grid),bias_b,col,row,2,1);
+      g_signal_connect(bias_b,"toggled",G_CALLBACK(bias_cb),NULL);
+      row++;
+
+      if(row>temp_row) temp_row=row;
+  }
 
   row=temp_row;
   col=0;
@@ -809,22 +814,24 @@ void radio_menu(GtkWidget *parent) {
 
   col++;
 
-  
-  GtkWidget *sat_combo=gtk_combo_box_text_new();
-  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sat_combo),NULL,"SAT Off");
-  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sat_combo),NULL,"SAT");
-  gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(sat_combo),NULL,"RSAT");
-  gtk_combo_box_set_active(GTK_COMBO_BOX(sat_combo),sat_mode);
-  gtk_grid_attach(GTK_GRID(grid),sat_combo,col,row,1,1);
-  g_signal_connect(sat_combo,"changed",G_CALLBACK(sat_cb),NULL);
-
-  col++;
-
   mute_rx_b=gtk_check_button_new_with_label("Mute RX when TX");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mute_rx_b), mute_rx_while_transmitting);
   gtk_grid_attach(GTK_GRID(grid),mute_rx_b,col,row,1,1);
   g_signal_connect(mute_rx_b,"toggled",G_CALLBACK(mute_rx_cb),NULL);
 
+  col++;
+
+  GtkWidget *PA_enable_b=gtk_check_button_new_with_label("PA enable");
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (PA_enable_b), pa_enabled);
+  gtk_grid_attach(GTK_GRID(grid),PA_enable_b,col,row,1,1);
+  g_signal_connect(PA_enable_b,"toggled",G_CALLBACK(PA_enable_cb),NULL);
+
+  col++;
+  GtkWidget *iqswap_b=gtk_check_button_new_with_label("Swap IQ");
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (iqswap_b), iqswap);
+  gtk_grid_attach(GTK_GRID(grid),iqswap_b,col,row,1,1);
+  g_signal_connect(iqswap_b,"toggled",G_CALLBACK(iqswap_cb),NULL);
+
   row++;
   col=0;
 
@@ -851,12 +858,6 @@ void radio_menu(GtkWidget *parent) {
     g_signal_connect(rx_gain_calibration_b,"value_changed",G_CALLBACK(rx_gain_calibration_value_changed_cb),NULL);
   }
 
-  col++;
-  GtkWidget *PA_enable_b=gtk_check_button_new_with_label("PA enable");
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (PA_enable_b), pa_enabled);
-  gtk_grid_attach(GTK_GRID(grid),PA_enable_b,col,row,1,1);
-  g_signal_connect(PA_enable_b,"toggled",G_CALLBACK(PA_enable_cb),NULL);
-
   row++;
 
   if(row>temp_row) temp_row=row;
@@ -865,20 +866,25 @@ void radio_menu(GtkWidget *parent) {
   col=0;
   if(radio->device==SOAPYSDR_USB_DEVICE) {
     int i;
-    if(radio->info.soapy.rx_gains>0) {
-      GtkWidget *rx_gain=gtk_label_new(NULL);
-      gtk_label_set_markup(GTK_LABEL(rx_gain), "<b>RX Gains:</b>");
-      gtk_label_set_justify(GTK_LABEL(rx_gain),GTK_JUSTIFY_LEFT);
-      gtk_grid_attach(GTK_GRID(grid),rx_gain,col,row,1,1);
+    if(strcmp(radio->name,"sdrplay")==0 || strcmp(radio->name,"rtlsdr")==0) {
+      // We display fixed gains below
+      if(radio->info.soapy.rx_gains>0) {
+        GtkWidget *rx_gain=gtk_label_new(NULL);
+        gtk_label_set_markup(GTK_LABEL(rx_gain), "<b>RX Gains:</b>");
+        gtk_label_set_justify(GTK_LABEL(rx_gain),GTK_JUSTIFY_LEFT);
+        gtk_grid_attach(GTK_GRID(grid),rx_gain,col,row,1,1);
+      }
     }
 
     if(can_transmit) {
+      /*
       if(radio->info.soapy.tx_gains>0) {
         col=2;
         GtkWidget *tx_gain=gtk_label_new(NULL);
         gtk_label_set_markup(GTK_LABEL(tx_gain), "<b>TX Gains:</b>");
         gtk_grid_attach(GTK_GRID(grid),tx_gain,col,row,1,1);
       }
+      */
     }
 
     row++;