]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
split sliders from toolbar. updated noise dialog to use radio buttons. added toolbar...
authorJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Sat, 16 Apr 2016 09:47:21 +0000 (09:47 +0000)
committerJohn Melton g0orx/n6lyt <john.d.melton@googlemail.com>
Sat, 16 Apr 2016 09:47:21 +0000 (09:47 +0000)
13 files changed:
Makefile
main.c
menu.c
old_protocol.c
pihpsdr
radio.c
radio.h
release/pihpsdr.tar
release/pihpsdr/pihpsdr
sliders.c [new file with mode: 0644]
sliders.h [new file with mode: 0644]
toolbar.c
toolbar.h

index 253fb97acf0864fc178bcef8548f0ae1608403fc..0ece6270ad98cd149d03c7c636c44129816c31d2 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -37,6 +37,7 @@ radio.c \
 gpio.c \
 splash.c \
 toolbar.c \
+sliders.c \
 version.c \
 vfo.c \
 waterfall.c \
@@ -64,6 +65,7 @@ radio.h \
 gpio.h \
 splash.h \
 toolbar.h \
+sliders.h \
 version.h \
 vfo.h \
 waterfall.h \
@@ -91,6 +93,7 @@ radio.o \
 gpio.o \
 splash.o \
 toolbar.o \
+sliders.o \
 vfo.o \
 waterfall.o \
 wdsp_init.o
diff --git a/main.c b/main.c
index e276d55e953368cea581612a0da9fe85b9f7bc14..e9405ccfd5b60eaeead9090557005c173c7a97d1 100644 (file)
--- a/main.c
+++ b/main.c
@@ -42,6 +42,7 @@
 #include "splash.h"
 #include "waterfall.h"
 #include "toolbar.h"
+#include "sliders.h"
 #include "radio.h"
 #include "wdsp_init.h"
 #include "version.h"
@@ -233,6 +234,10 @@ static void display_toolbar_cb(GtkWidget *widget, gpointer data) {
   display_toolbar=display_toolbar==1?0:1;
 }
 
+static void toolbar_simulate_buttons_cb(GtkWidget *widget, gpointer data) {
+  toolbar_simulate_buttons=toolbar_simulate_buttons==1?0:1;
+}
+
 static void configure_gpio() {
   gpio_restore_state();
 
@@ -600,6 +605,12 @@ static void configure_cb(GtkWidget *widget, gpointer data) {
   gtk_grid_attach(GTK_GRID(grid),b_display_toolbar,0,9,1,1);
   g_signal_connect(b_display_toolbar,"toggled",G_CALLBACK(display_toolbar_cb),(gpointer *)NULL);
 
+  GtkWidget *b_toolbar_simulate_buttons=gtk_check_button_new_with_label("Toolbar Simulate Buttons");
+  //gtk_widget_override_font(b_toolbar_simulate_buttons, pango_font_description_from_string("Arial 18"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_toolbar_simulate_buttons), toolbar_simulate_buttons);
+  gtk_widget_show(b_toolbar_simulate_buttons);
+  gtk_grid_attach(GTK_GRID(grid),b_toolbar_simulate_buttons,0,10,1,1);
+  g_signal_connect(b_toolbar_simulate_buttons,"toggled",G_CALLBACK(toolbar_simulate_buttons_cb),(gpointer *)NULL);
   gtk_container_add(GTK_CONTAINER(content),grid);
 
   GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK);
diff --git a/menu.c b/menu.c
index 6cdfec6b2034328e15ac7dabe9f050f86bf45e00..ac7ed8258c3f9d9f25bc65d471de3d77a166ec92 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -260,6 +260,9 @@ static void frames_per_second_value_changed_cb(GtkWidget *widget, gpointer data)
   calculate_display_average();
 }
 
+static void oc_tune_time_cb(GtkWidget *widget, gpointer data) {
+  OCtune_time=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
+}
 
 static gboolean menu_pressed_event_cb (GtkWidget *widget,
                GdkEventButton *event,
@@ -643,8 +646,8 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
 
   GtkWidget *oc_label=gtk_label_new("OC");
   GtkWidget *oc_grid=gtk_grid_new();
-  gtk_grid_set_row_homogeneous(GTK_GRID(oc_grid),TRUE);
-  gtk_grid_set_column_spacing (GTK_GRID(oc_grid),15);
+  //gtk_grid_set_row_homogeneous(GTK_GRID(oc_grid),TRUE);
+  gtk_grid_set_column_spacing (GTK_GRID(oc_grid),10);
 
   GtkWidget *band_title=gtk_label_new("Band");
   //gtk_widget_override_font(band_title, pango_font_description_from_string("Arial 18"));
@@ -740,6 +743,17 @@ static gboolean menu_pressed_event_cb (GtkWidget *widget,
     g_signal_connect(oc_tune_b,"toggled",G_CALLBACK(oc_tune_cb),(gpointer)j);
   }
 
+  GtkWidget *oc_tune_time_title=gtk_label_new("Tune Duration(ms):");
+  //gtk_widget_override_font(oc_tune_time_title, pango_font_description_from_string("Arial 18"));
+  gtk_widget_show(oc_tune_time_title);
+  gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_time_title,18,j+2,2,1);
+
+  GtkWidget *oc_tune_time_b=gtk_spin_button_new_with_range(0.0,9999.0,1.0);
+  //gtk_widget_override_font(oc_tune_time_b, pango_font_description_from_string("Arial 18"));
+  gtk_spin_button_set_value(GTK_SPIN_BUTTON(oc_tune_time_b),(double)OCtune_time);
+  gtk_widget_show(oc_tune_time_b);
+  gtk_grid_attach(GTK_GRID(oc_grid),oc_tune_time_b,18,j+3,2,1);
+  g_signal_connect(oc_tune_time_b,"value_changed",G_CALLBACK(oc_tune_time_cb),NULL);
 
   id=gtk_notebook_append_page(GTK_NOTEBOOK(notebook),oc_grid,oc_label);
 
index 7994a1e5acf4dd46cc834e19f9e4a5a3cd89c010..a1b9b159ba548cd69fe12827733627a3968c4b81 100644 (file)
@@ -575,7 +575,16 @@ void ozy_send_buffer() {
       if(isTransmitting()) {
         output_buffer[C2]|=band->OCtx;
         if(tune) {
-          output_buffer[C2]|=OCtune;
+          if(OCtune_time!=0) {
+            struct timeval te;
+            gettimeofday(&te,NULL);
+            long long now=te.tv_sec*1000LL+te.tv_usec/1000;
+            if(tune_timeout>now) {
+              output_buffer[C2]|=OCtune;
+            }
+          } else {
+            output_buffer[C2]|=OCtune;
+          }
         }
       } else {
         output_buffer[C2]|=band->OCrx;
diff --git a/pihpsdr b/pihpsdr
index 8e73b85cfe285c23979c4a2cd8c74615749fa3d8..ec122cb909f4c37ff2623c7d53b1abe4813dd781 100755 (executable)
Binary files a/pihpsdr and b/pihpsdr differ
diff --git a/radio.c b/radio.c
index 34cf7c0c152a3ab853058ad4eaa519dab475b733..23a493cf5dd22a6df6fc9a0a72a851d858a3df2d 100644 (file)
--- a/radio.c
+++ b/radio.c
@@ -73,6 +73,7 @@ int waterfall_automatic=1;
 
 int display_sliders=1;
 int display_toolbar=1;
+int toolbar_simulate_buttons=1;
 
 double volume=0.2;
 double mic_gain=1.5;
@@ -90,6 +91,7 @@ int mic_ptt_tip_bias_ring=0;
 int agc=AGC_MEDIUM;
 double agc_gain=60.0;
 
+int nr_none=1;
 int nr=0;
 int nr2=0;
 int nb=0;
@@ -158,6 +160,8 @@ int tune;
 long long ddsFrequency=14250000;
 
 unsigned char OCtune=0;
+int OCtune_time=2800; // ms
+long long tune_timeout;
 
 void init_radio() {
   int rc;
@@ -195,6 +199,13 @@ void setTune(int state) {
 fprintf(stderr,"setTune: protocol=%d\n", protocol);
   if(tune!=state) {
     tune=state;
+    if(tune) {
+      if(OCtune_time!=0) {
+        struct timeval te;
+        gettimeofday(&te,NULL);
+        tune_timeout=(te.tv_sec*1000LL+te.tv_usec/1000)+(long long)OCtune_time;
+      }
+    }
     if(protocol==NEW_PROTOCOL) {
       schedule_high_priority(4);
       schedule_general();
@@ -315,6 +326,8 @@ void radioRestoreState() {
     if(value) display_sliders=atoi(value);
     value=getProperty("display_toolbar");
     if(value) display_toolbar=atoi(value);
+    value=getProperty("toolbar_simulate_buttons");
+    if(value) toolbar_simulate_buttons=atoi(value);
     value=getProperty("waterfall_high");
     if(value) waterfall_high=atoi(value);
     value=getProperty("waterfall_low");
@@ -339,10 +352,16 @@ void radioRestoreState() {
     if(value) mic_bias_enabled=atof(value);
     value=getProperty("mic_ptt_tip_bias_ring");
     if(value) mic_ptt_tip_bias_ring=atof(value);
+    value=getProperty("nr_none");
+    if(value) nr_none=atoi(value);
     value=getProperty("nr");
     if(value) nr=atoi(value);
+    value=getProperty("nr2");
+    if(value) nr2=atoi(value);
     value=getProperty("nb");
     if(value) nb=atoi(value);
+    value=getProperty("nb2");
+    if(value) nb2=atoi(value);
     value=getProperty("anf");
     if(value) anf=atoi(value);
     value=getProperty("snb");
@@ -381,6 +400,8 @@ void radioRestoreState() {
     if(value) vfo_encoder_divisor=atoi(value);
     value=getProperty("OCtune");
     if(value) OCtune=atoi(value);
+    value=getProperty("OCtune_time");
+    if(value) OCtune_time=atoi(value);
 
     bandRestoreState();
     sem_post(&property_sem);
@@ -420,6 +441,8 @@ void radioSaveState() {
     setProperty("display_sliders",value);
     sprintf(value,"%d",display_toolbar);
     setProperty("display_toolbar",value);
+    sprintf(value,"%d",toolbar_simulate_buttons);
+    setProperty("toolbar_simulate_buttons",value);
     sprintf(value,"%d",waterfall_high);
     setProperty("waterfall_high",value);
     sprintf(value,"%d",waterfall_low);
@@ -444,10 +467,16 @@ void radioSaveState() {
     setProperty("mic_bias_enabled",value);
     sprintf(value,"%d",mic_ptt_tip_bias_ring);
     setProperty("mic_ptt_tip_bias_ring",value);
+    sprintf(value,"%d",nr_none);
+    setProperty("nr_none",value);
     sprintf(value,"%d",nr);
     setProperty("nr",value);
+    sprintf(value,"%d",nr2);
+    setProperty("nr2",value);
     sprintf(value,"%d",nb);
     setProperty("nb",value);
+    sprintf(value,"%d",nb2);
+    setProperty("nb2",value);
     sprintf(value,"%d",anf);
     setProperty("anf",value);
     sprintf(value,"%d",snb);
@@ -486,6 +515,8 @@ void radioSaveState() {
     setProperty("vfo_encoder_divisor",value);
     sprintf(value,"%d",OCtune);
     setProperty("OCtune",value);
+    sprintf(value,"%d",OCtune_time);
+    setProperty("OCtune_time",value);
 
     bandSaveState();
 
diff --git a/radio.h b/radio.h
index 92f4c5ffb4ee7c2b3a0e4bf21a898f5375a99177..1379abc97665e423a6b15ff2207cabe303b97737 100644 (file)
--- a/radio.h
+++ b/radio.h
@@ -92,12 +92,14 @@ extern int waterfall_automatic;
 
 extern int display_sliders;
 extern int display_toolbar;
+extern int toolbar_simulate_buttons;
 
 extern double volume;
 extern double mic_gain;
 extern int agc;
 extern double agc_gain;
 
+extern int nr_none;
 extern int nr;
 extern int nr2;
 extern int nb;
@@ -172,6 +174,8 @@ extern int supply_volts;
 extern long long ddsFrequency;
 
 extern unsigned char OCtune;
+extern int OCtune_time;
+extern long long tune_timeout;
 
 extern void init_radio();
 extern void setSampleRate(int rate);
index 3cb469cf54bb0afcdc1421f7ddb9ca3d62232027..82c72806118441cb012e8774f9a6d1a4adb34b09 100644 (file)
Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ
index 8e73b85cfe285c23979c4a2cd8c74615749fa3d8..ec122cb909f4c37ff2623c7d53b1abe4813dd781 100755 (executable)
Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ
diff --git a/sliders.c b/sliders.c
new file mode 100644 (file)
index 0000000..5b0476d
--- /dev/null
+++ b/sliders.c
@@ -0,0 +1,396 @@
+/* Copyright (C)
+* 2015 - John Melton, G0ORX/N6LYT
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*
+*/
+
+#include <gtk/gtk.h>
+#include <semaphore.h>
+#include <stdio.h>
+
+#include "sliders.h"
+#include "mode.h"
+#include "filter.h"
+#include "frequency.h"
+#include "bandstack.h"
+#include "band.h"
+#include "discovered.h"
+#include "new_protocol.h"
+#include "vfo.h"
+#include "alex.h"
+#include "agc.h"
+#include "channel.h"
+#include "wdsp.h"
+#include "radio.h"
+#include "property.h"
+
+static int width;
+static int height;
+
+static GtkWidget *parent_window;
+static GtkWidget *sliders;
+
+#define NONE 0
+#define AF_GAIN 1
+#define MIC_GAIN 2
+#define AGC_GAIN 3
+#define DRIVE 4
+#define TUNE_DRIVE 5
+#define ATTENUATION 5
+
+#define MIC_GAIN_FUDGE 25.0
+
+static gint scale_timer;
+static int scale_status=NONE;
+static GtkWidget *scale_dialog;
+static GtkWidget *af_gain_label;
+static GtkWidget *af_gain_scale;
+static GtkWidget *agc_gain_label;
+static GtkWidget *agc_scale;
+static GtkWidget *attenuation_label;
+static GtkWidget *attenuation_scale;
+static GtkWidget *mic_gain_label;
+static GtkWidget *mic_gain_scale;
+static GtkWidget *drive_label;
+static GtkWidget *drive_scale;
+static GtkWidget *tune_label;
+static GtkWidget *tune_scale;
+static GtkWidget *dummy_label;
+
+static GdkRGBA white;
+static GdkRGBA gray;
+
+int scale_timeout_cb(gpointer data) {
+fprintf(stderr,"scale_timeout_cb\n");
+  gtk_widget_destroy(scale_dialog);
+  scale_status=NONE;
+  return FALSE;
+}
+
+static void attenuation_value_changed_cb(GtkWidget *widget, gpointer data) {
+  attenuation=gtk_range_get_value(GTK_RANGE(attenuation_scale));
+  if(protocol==NEW_PROTOCOL) {
+    // need to schedule something
+  }
+}
+
+void set_attenuation_value(double value) {
+  attenuation=(int)value;
+  if(display_sliders) {
+    gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+  } else {
+    if(scale_status!=ATTENUATION) {
+      if(scale_status!=NONE) {
+        g_source_remove(scale_timer);
+        gtk_widget_destroy(scale_dialog);
+        scale_status=NONE;
+      }
+    }
+    if(scale_status==NONE) {
+      scale_status=ATTENUATION;
+      scale_dialog=gtk_dialog_new_with_buttons("Attenuation (dB)",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
+      attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.00);
+      gtk_widget_set_size_request (attenuation_scale, 400, 30);
+      gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+      gtk_widget_show(attenuation_scale);
+      gtk_container_add(GTK_CONTAINER(content),attenuation_scale);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+      //gtk_widget_show_all(scale_dialog);
+      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
+    } else {
+      g_source_remove(scale_timer);
+      gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+    }
+  }
+  if(protocol==NEW_PROTOCOL) {
+    // need to schedule something
+  }
+}
+
+static void agcgain_value_changed_cb(GtkWidget *widget, gpointer data) {
+  agc_gain=gtk_range_get_value(GTK_RANGE(agc_scale));
+  SetRXAAGCTop(CHANNEL_RX0, agc_gain);
+}
+
+void set_agc_gain(double value) {
+  agc_gain=value;
+  SetRXAAGCTop(CHANNEL_RX0, agc_gain);
+  if(display_sliders) {
+    gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
+  } else {
+    if(scale_status!=AGC_GAIN) {
+      if(scale_status!=NONE) {
+        g_source_remove(scale_timer);
+        gtk_widget_destroy(scale_dialog);
+        scale_status=NONE;
+      }
+    }
+    if(scale_status==NONE) {
+      scale_status=AGC_GAIN;
+      scale_dialog=gtk_dialog_new_with_buttons("AGC Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
+      agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.00);
+      gtk_widget_set_size_request (agc_scale, 400, 30);
+      gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
+      gtk_widget_show(agc_scale);
+      gtk_container_add(GTK_CONTAINER(content),agc_scale);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+      //gtk_widget_show_all(scale_dialog);
+      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
+    } else {
+      g_source_remove(scale_timer);
+      gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+    }
+  }
+}
+
+static void afgain_value_changed_cb(GtkWidget *widget, gpointer data) {
+    volume=gtk_range_get_value(GTK_RANGE(af_gain_scale))/100.0;
+}
+
+void set_af_gain(double value) {
+  volume=value;
+  if(display_sliders) {
+    gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
+  } else {
+    if(scale_status!=AF_GAIN) {
+      if(scale_status!=NONE) {
+        g_source_remove(scale_timer);
+        gtk_widget_destroy(scale_dialog);
+        scale_status=NONE;
+      }
+    }
+    if(scale_status==NONE) {
+      scale_status=AF_GAIN;
+      scale_dialog=gtk_dialog_new_with_buttons("AF Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
+      af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
+      gtk_widget_set_size_request (af_gain_scale, 400, 30);
+      gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
+      gtk_widget_show(af_gain_scale);
+      gtk_container_add(GTK_CONTAINER(content),af_gain_scale);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+      //gtk_widget_show_all(scale_dialog);
+      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
+    } else {
+      g_source_remove(scale_timer);
+      gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+    }
+  }
+}
+
+static void micgain_value_changed_cb(GtkWidget *widget, gpointer data) {
+    mic_gain=gtk_range_get_value(GTK_RANGE(widget))/MIC_GAIN_FUDGE;
+fprintf(stderr,"micgain_value_changed: %f\n",mic_gain);
+}
+
+void set_mic_gain(double value) {
+  mic_gain=value;
+fprintf(stderr,"set_mic_gain: %f\n",mic_gain);
+  if(display_sliders) {
+    gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
+  } else {
+    if(scale_status!=MIC_GAIN) {
+      if(scale_status!=NONE) {
+        g_source_remove(scale_timer);
+        gtk_widget_destroy(scale_dialog);
+        scale_status=NONE;
+      }
+    }
+    if(scale_status==NONE) {
+      scale_status=MIC_GAIN;
+      scale_dialog=gtk_dialog_new_with_buttons("Mic Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
+      mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
+      gtk_widget_set_size_request (mic_gain_scale, 400, 30);
+      gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
+      gtk_widget_show(mic_gain_scale);
+      gtk_container_add(GTK_CONTAINER(content),mic_gain_scale);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+      //gtk_widget_show_all(scale_dialog);
+      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
+    } else {
+      g_source_remove(scale_timer);
+      gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+    }
+
+  }
+}
+
+void set_drive(double value) {
+  setDrive(value);
+  if(display_sliders) {
+    gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0);
+  } else {
+    if(scale_status!=DRIVE) {
+      if(scale_status!=NONE) {
+        g_source_remove(scale_timer);
+        gtk_widget_destroy(scale_dialog);
+        scale_status=NONE;
+      }
+    }
+    if(scale_status==NONE) {
+      scale_status=DRIVE;
+      scale_dialog=gtk_dialog_new_with_buttons("Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
+      drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
+      gtk_widget_set_size_request (drive_scale, 400, 30);
+      gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0);
+      gtk_widget_show(drive_scale);
+      gtk_container_add(GTK_CONTAINER(content),drive_scale);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+      //gtk_widget_show_all(scale_dialog);
+      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
+    } else {
+      g_source_remove(scale_timer);
+      gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+    }
+  }
+}
+
+static void drive_value_changed_cb(GtkWidget *widget, gpointer data) {
+  setDrive(gtk_range_get_value(GTK_RANGE(drive_scale))/100.0);
+}
+
+void set_tune(double value) {
+  setTuneDrive(value);
+  if(display_sliders) {
+    gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0);
+  } else {
+    if(scale_status!=TUNE_DRIVE) {
+      if(scale_status!=NONE) {
+        g_source_remove(scale_timer);
+        gtk_widget_destroy(scale_dialog);
+        scale_status=NONE;
+      }
+    }
+    if(scale_status==NONE) {
+      scale_status=TUNE_DRIVE;
+      scale_dialog=gtk_dialog_new_with_buttons("Tune Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
+      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
+      tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
+      gtk_widget_set_size_request (tune_scale, 400, 30);
+      gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0);
+      gtk_widget_show(tune_scale);
+      gtk_container_add(GTK_CONTAINER(content),tune_scale);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+      //gtk_widget_show_all(scale_dialog);
+      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
+    } else {
+      g_source_remove(scale_timer);
+      gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0);
+      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
+    }
+  }
+}
+
+static void tune_value_changed_cb(GtkWidget *widget, gpointer data) {
+  setTuneDrive(gtk_range_get_value(GTK_RANGE(tune_scale))/100.0);
+}
+
+GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent) {
+    width=my_width;
+    height=my_height;
+    parent_window=parent;
+
+    fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height);
+
+    sliders=gtk_grid_new();
+    gtk_widget_set_size_request (sliders, width, height);
+    gtk_grid_set_row_homogeneous(GTK_GRID(sliders), FALSE);
+    gtk_grid_set_column_homogeneous(GTK_GRID(sliders),TRUE);
+
+  af_gain_label=gtk_label_new("AF:");
+  //gtk_widget_override_font(af_gain_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(af_gain_label);
+  gtk_grid_attach(GTK_GRID(sliders),af_gain_label,0,0,1,1);
+
+  af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
+  gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
+  gtk_widget_show(af_gain_scale);
+  gtk_grid_attach(GTK_GRID(sliders),af_gain_scale,1,0,2,1);
+  g_signal_connect(G_OBJECT(af_gain_scale),"value_changed",G_CALLBACK(afgain_value_changed_cb),NULL);
+
+  agc_gain_label=gtk_label_new("AGC:");
+  //gtk_widget_override_font(agc_gain_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(agc_gain_label);
+  gtk_grid_attach(GTK_GRID(sliders),agc_gain_label,3,0,1,1);
+
+  agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.0);
+  gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
+  gtk_widget_show(agc_scale);
+  gtk_grid_attach(GTK_GRID(sliders),agc_scale,4,0,2,1);
+  g_signal_connect(G_OBJECT(agc_scale),"value_changed",G_CALLBACK(agcgain_value_changed_cb),NULL);
+
+  attenuation_label=gtk_label_new("ATT (dB):");
+  //gtk_widget_override_font(attenuation_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(attenuation_label);
+  gtk_grid_attach(GTK_GRID(sliders),attenuation_label,6,0,1,1);
+
+  attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.0);
+  gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
+  gtk_widget_show(attenuation_scale);
+  gtk_grid_attach(GTK_GRID(sliders),attenuation_scale,7,0,2,1);
+  g_signal_connect(G_OBJECT(attenuation_scale),"value_changed",G_CALLBACK(attenuation_value_changed_cb),NULL);
+
+
+
+  mic_gain_label=gtk_label_new("Mic:");
+  //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(mic_gain_label);
+  gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1);
+
+  mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0);
+  gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
+  gtk_widget_show(mic_gain_scale);
+  gtk_grid_attach(GTK_GRID(sliders),mic_gain_scale,1,1,2,1);
+  g_signal_connect(G_OBJECT(mic_gain_scale),"value_changed",G_CALLBACK(micgain_value_changed_cb),NULL);
+
+  drive_label=gtk_label_new("Drive:");
+  //gtk_widget_override_font(drive_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(drive_label);
+  gtk_grid_attach(GTK_GRID(sliders),drive_label,3,1,1,1);
+
+  drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0);
+  gtk_range_set_value (GTK_RANGE(drive_scale),getDrive()*100.0);
+  gtk_widget_show(drive_scale);
+  gtk_grid_attach(GTK_GRID(sliders),drive_scale,4,1,2,1);
+  g_signal_connect(G_OBJECT(drive_scale),"value_changed",G_CALLBACK(drive_value_changed_cb),NULL);
+
+  tune_label=gtk_label_new("Tune:");
+  //gtk_widget_override_font(tune_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(tune_label);
+  gtk_grid_attach(GTK_GRID(sliders),tune_label,6,1,1,1);
+
+  tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0);
+  gtk_range_set_value (GTK_RANGE(tune_scale),getTuneDrive()*100.0);
+  gtk_widget_show(tune_scale);
+  gtk_grid_attach(GTK_GRID(sliders),tune_scale,7,1,2,1);
+  g_signal_connect(G_OBJECT(tune_scale),"value_changed",G_CALLBACK(tune_value_changed_cb),NULL);
+
+  dummy_label=gtk_label_new(" ");
+  //gtk_widget_override_font(dummy_label, pango_font_description_from_string("Arial 16"));
+  gtk_widget_show(dummy_label);
+  gtk_grid_attach(GTK_GRID(sliders),dummy_label,9,1,1,1);
+
+  return sliders;
+}
diff --git a/sliders.h b/sliders.h
new file mode 100644 (file)
index 0000000..be25b58
--- /dev/null
+++ b/sliders.h
@@ -0,0 +1,26 @@
+/* Copyright (C)
+* 2015 - John Melton, G0ORX/N6LYT
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*
+*/
+
+void set_agc_gain(double value);
+void set_af_gain(double value);
+void set_mic_gain(double value);
+void set_drive(double drive);
+void set_tune(double tune);
+void set_attenuation_value(double attenuation);
+GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent);
index 88ddf49513cec49da68762ae097c1a632e71f514..c24462b7474616f914bdbc0546d4c69150f169c3 100644 (file)
--- a/toolbar.c
+++ b/toolbar.c
@@ -21,6 +21,7 @@
 #include <semaphore.h>
 #include <stdio.h>
 
+#include "gpio.h"
 #include "toolbar.h"
 #include "mode.h"
 #include "filter.h"
@@ -41,40 +42,12 @@ static int width;
 static int height;
 
 static GtkWidget *parent_window;
-static GtkWidget *sliders;
 static GtkWidget *toolbar;
 
 static GtkWidget *last_band;
 static GtkWidget *last_mode;
 static GtkWidget *last_filter;
 
-#define NONE 0
-#define AF_GAIN 1
-#define MIC_GAIN 2
-#define AGC_GAIN 3
-#define DRIVE 4
-#define TUNE_DRIVE 5
-#define ATTENUATION 5
-
-#define MIC_GAIN_FUDGE 25.0
-
-static gint scale_timer;
-static int scale_status=NONE;
-static GtkWidget *scale_dialog;
-static GtkWidget *af_gain_label;
-static GtkWidget *af_gain_scale;
-static GtkWidget *agc_gain_label;
-static GtkWidget *agc_scale;
-static GtkWidget *attenuation_label;
-static GtkWidget *attenuation_scale;
-static GtkWidget *mic_gain_label;
-static GtkWidget *mic_gain_scale;
-static GtkWidget *drive_label;
-static GtkWidget *drive_scale;
-static GtkWidget *tune_label;
-static GtkWidget *tune_scale;
-static GtkWidget *dummy_label;
-
 static GdkRGBA white;
 static GdkRGBA gray;
 
@@ -249,201 +222,87 @@ static void filter_cb(GtkWidget *widget, gpointer data) {
 
 }
 
-int scale_timeout_cb(gpointer data) {
-fprintf(stderr,"scale_timeout_cb\n");
-  gtk_widget_destroy(scale_dialog);
-  scale_status=NONE;
-  return FALSE;
-}
-
-static void attenuation_value_changed_cb(GtkWidget *widget, gpointer data) {
-  attenuation=gtk_range_get_value(GTK_RANGE(attenuation_scale));
-  if(protocol==NEW_PROTOCOL) {
-    // need to schedule something
-  }
-}
-
-void set_attenuation_value(double value) {
-  attenuation=(int)value;
-  if(display_sliders) {
-    gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
-  } else {
-    if(scale_status!=ATTENUATION) {
-      if(scale_status!=NONE) {
-        g_source_remove(scale_timer);
-        gtk_widget_destroy(scale_dialog);
-        scale_status=NONE;
-      }
-    }
-    if(scale_status==NONE) {
-      scale_status=ATTENUATION;
-      scale_dialog=gtk_dialog_new_with_buttons("Attenuation (dB)",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
-      attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.00);
-      gtk_widget_set_size_request (attenuation_scale, 400, 30);
-      gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
-      gtk_widget_show(attenuation_scale);
-      gtk_container_add(GTK_CONTAINER(content),attenuation_scale);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-      //gtk_widget_show_all(scale_dialog);
-      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
-    } else {
-      g_source_remove(scale_timer);
-      gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-    }
-  }
-  if(protocol==NEW_PROTOCOL) {
-    // need to schedule something
-  }
-}
-
 static void agc_select_cb(GtkWidget *widget, gpointer data) {
   agc=(int)data;
   SetRXAAGCMode(CHANNEL_RX0, agc);
 }
 
-static void agcgain_value_changed_cb(GtkWidget *widget, gpointer data) {
-  agc_gain=gtk_range_get_value(GTK_RANGE(agc_scale));
-  SetRXAAGCTop(CHANNEL_RX0, agc_gain);
-}
-
-void set_agc_gain(double value) {
-  agc_gain=value;
-  SetRXAAGCTop(CHANNEL_RX0, agc_gain);
-  if(display_sliders) {
-    gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
-  } else {
-    if(scale_status!=AGC_GAIN) {
-      if(scale_status!=NONE) {
-        g_source_remove(scale_timer);
-        gtk_widget_destroy(scale_dialog);
-        scale_status=NONE;
-      }
-    }
-    if(scale_status==NONE) {
-      scale_status=AGC_GAIN;
-      scale_dialog=gtk_dialog_new_with_buttons("AGC Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
-      agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.00);
-      gtk_widget_set_size_request (agc_scale, 400, 30);
-      gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
-      gtk_widget_show(agc_scale);
-      gtk_container_add(GTK_CONTAINER(content),agc_scale);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-      //gtk_widget_show_all(scale_dialog);
-      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
-    } else {
-      g_source_remove(scale_timer);
-      gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-    }
-  }
-}
-
-static void afgain_value_changed_cb(GtkWidget *widget, gpointer data) {
-    volume=gtk_range_get_value(GTK_RANGE(af_gain_scale))/100.0;
-}
-
-void set_af_gain(double value) {
-  volume=value;
-  if(display_sliders) {
-    gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
-  } else {
-    if(scale_status!=AF_GAIN) {
-      if(scale_status!=NONE) {
-        g_source_remove(scale_timer);
-        gtk_widget_destroy(scale_dialog);
-        scale_status=NONE;
-      }
-    }
-    if(scale_status==NONE) {
-      scale_status=AF_GAIN;
-      scale_dialog=gtk_dialog_new_with_buttons("AF Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
-      af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
-      gtk_widget_set_size_request (af_gain_scale, 400, 30);
-      gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
-      gtk_widget_show(af_gain_scale);
-      gtk_container_add(GTK_CONTAINER(content),af_gain_scale);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-      //gtk_widget_show_all(scale_dialog);
-      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
-    } else {
-      g_source_remove(scale_timer);
-      gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-    }
-  }
+static void update_noise() {
+  SetRXAANRRun(CHANNEL_RX0, nr);
+  SetRXAEMNRRun(CHANNEL_RX0, nr2);
+  SetRXAANFRun(CHANNEL_RX0, anf);
+  SetRXASNBARun(CHANNEL_RX0, snb);
+  vfo_update(NULL);
 }
 
-static void micgain_value_changed_cb(GtkWidget *widget, gpointer data) {
-    mic_gain=gtk_range_get_value(GTK_RANGE(widget))/MIC_GAIN_FUDGE;
-fprintf(stderr,"micgain_value_changed: %f\n",mic_gain);
-}
-
-void set_mic_gain(double value) {
-  mic_gain=value;
-fprintf(stderr,"set_mic_gain: %f\n",mic_gain);
-  if(display_sliders) {
-    gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
-  } else {
-    if(scale_status!=MIC_GAIN) {
-      if(scale_status!=NONE) {
-        g_source_remove(scale_timer);
-        gtk_widget_destroy(scale_dialog);
-        scale_status=NONE;
-      }
-    }
-    if(scale_status==NONE) {
-      scale_status=MIC_GAIN;
-      scale_dialog=gtk_dialog_new_with_buttons("Mic Gain",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
-      mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
-      gtk_widget_set_size_request (mic_gain_scale, 400, 30);
-      gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
-      gtk_widget_show(mic_gain_scale);
-      gtk_container_add(GTK_CONTAINER(content),mic_gain_scale);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-      //gtk_widget_show_all(scale_dialog);
-      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
-    } else {
-      g_source_remove(scale_timer);
-      gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-    }
-
-  }
+static void nr_none_cb(GtkWidget *widget, gpointer data) {
+  nr=0;
+  nr2=0;
+  nb=0;
+  nb2=0;
+  anf=0;
+  snb=0;
+  update_noise();
 }
 
 static void nr_cb(GtkWidget *widget, gpointer data) {
-  nr=nr==0?1:0;
-  SetRXAANRRun(CHANNEL_RX0, nr);
+  nr=1;
+  nr2=0;
+  nb=0;
+  nb2=0;
+  anf=0;
+  snb=0;
+  update_noise();
 }
 
 static void nr2_cb(GtkWidget *widget, gpointer data) {
-  nr2=nr2==0?1:0;
-  SetRXAEMNRRun(CHANNEL_RX0, nr);
+  nr=0;
+  nr2=1;
+  nb=0;
+  nb2=0;
+  anf=0;
+  snb=0;
+  update_noise();
 }
 
 static void nb_cb(GtkWidget *widget, gpointer data) {
-  nb=nb==0?1:0;
-  SetRXAEMNRRun(CHANNEL_RX0, nb);
+  nr=0;
+  nr2=0;
+  nb=1;
+  nb2=0;
+  anf=0;
+  snb=0;
+  update_noise();
 }
 
 static void nb2_cb(GtkWidget *widget, gpointer data) {
-  nb2=nb2==0?1:0;
-  SetRXAEMNRaeRun(CHANNEL_RX0, nb2);
+  nr=0;
+  nr2=0;
+  nb=0;
+  nb2=1;
+  anf=0;
+  snb=0;
+  update_noise();
 }
 
 static void anf_cb(GtkWidget *widget, gpointer data) {
-  anf=anf==0?1:0;
-  SetRXAANFRun(CHANNEL_RX0, anf);
+  nr=0;
+  nr2=0;
+  nb=0;
+  nb2=0;
+  anf=1;
+  snb=0;
+  update_noise();
 }
 
 static void snb_cb(GtkWidget *widget, gpointer data) {
-  snb=snb==0?1:0;
-  SetRXASNBARun(CHANNEL_RX0, snb);
+  nr=0;
+  nr2=0;
+  nb=0;
+  nb2=0;
+  anf=0;
+  snb=1;
+  update_noise();
 }
 
 static void audio_cb(GtkWidget *widget, gpointer data) {
@@ -490,52 +349,59 @@ static void audio_cb(GtkWidget *widget, gpointer data) {
   gtk_grid_attach(GTK_GRID(grid),b_fast,0,4,2,1);
   g_signal_connect(b_fast,"pressed",G_CALLBACK(agc_select_cb),(gpointer *)AGC_FAST);
 
+  GtkWidget *b_nr_none=gtk_radio_button_new_with_label(NULL,"None");
+  //gtk_widget_override_font(b_none, pango_font_description_from_string("Arial 16"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr_none), nr_none==1);
+  gtk_widget_show(b_nr_none);
+  gtk_grid_attach(GTK_GRID(grid),b_nr_none,2,0,2,1);
+  g_signal_connect(b_nr_none,"pressed",G_CALLBACK(nr_none_cb),NULL);
 
-  GtkWidget *b_nr=gtk_check_button_new_with_label("NR");
+  GtkWidget *b_nr=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr_none),"NR");
   //gtk_widget_override_font(b_nr, pango_font_description_from_string("Arial 16"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr), nr==1);
   gtk_widget_show(b_nr);
-  gtk_grid_attach(GTK_GRID(grid),b_nr,2,0,2,1);
-  g_signal_connect(b_nr,"toggled",G_CALLBACK(nr_cb),NULL);
+  gtk_grid_attach(GTK_GRID(grid),b_nr,2,1,2,1);
+  g_signal_connect(b_nr,"pressed",G_CALLBACK(nr_cb),NULL);
 
-  GtkWidget *b_nr2=gtk_check_button_new_with_label("NR2");
+  GtkWidget *b_nr2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr),"NR2");
   //gtk_widget_override_font(b_nr2, pango_font_description_from_string("Arial 16"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nr2), nr2==1);
   gtk_widget_show(b_nr2);
-  gtk_grid_attach(GTK_GRID(grid),b_nr2,2,1,2,1);
-  g_signal_connect(b_nr2,"toggled",G_CALLBACK(nr2_cb),NULL);
+  gtk_grid_attach(GTK_GRID(grid),b_nr2,2,2,2,1);
+  g_signal_connect(b_nr2,"pressed",G_CALLBACK(nr2_cb),NULL);
 
 /*
-  GtkWidget *b_nb=gtk_check_button_new_with_label("NB");
+  GtkWidget *b_nb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr2),"NB");
   //gtk_widget_override_font(b_nb, pango_font_description_from_string("Arial 16"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nb), nb==1);
   gtk_widget_show(b_nb);
-  gtk_grid_attach(GTK_GRID(grid),b_nb,2,2,2,1);
-  g_signal_connect(b_nb,"toggled",G_CALLBACK(nb_cb),NULL);
+  gtk_grid_attach(GTK_GRID(grid),b_nb,2,3,2,1);
+  g_signal_connect(b_nb,"pressed",G_CALLBACK(nb_cb),NULL);
 
-  GtkWidget *b_nb2=gtk_check_button_new_with_label("NB2");
+  GtkWidget *b_nb2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nb),"NB2");
   //gtk_widget_override_font(b_nb2, pango_font_description_from_string("Arial 16"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_nb2), nb2==1);
   gtk_widget_show(b_nb2);
-  gtk_grid_attach(GTK_GRID(grid),b_nb2,2,3,2,1);
-  g_signal_connect(b_nb2,"toggled",G_CALLBACK(nb2_cb),NULL);
+  gtk_grid_attach(GTK_GRID(grid),b_nb2,2,4,2,1);
+  g_signal_connect(b_nb2,"pressed",G_CALLBACK(nb2_cb),NULL);
 */
 
-  GtkWidget *b_anf=gtk_check_button_new_with_label("ANF");
+  GtkWidget *b_anf=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_nr2),"ANF");
   //gtk_widget_override_font(b_anf, pango_font_description_from_string("Arial 16"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_anf), anf==1);
   gtk_widget_show(b_anf);
-  gtk_grid_attach(GTK_GRID(grid),b_anf,2,2,2,1);
-  g_signal_connect(b_anf,"toggled",G_CALLBACK(anf_cb),NULL);
+  gtk_grid_attach(GTK_GRID(grid),b_anf,2,3,2,1);
+  g_signal_connect(b_anf,"pressed",G_CALLBACK(anf_cb),NULL);
 
-  GtkWidget *b_snb=gtk_check_button_new_with_label("SNB");
+  GtkWidget *b_snb=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(b_anf),"SNB");
   //gtk_widget_override_font(b_snb, pango_font_description_from_string("Arial 16"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_snb), snb==1);
   gtk_widget_show(b_snb);
-  gtk_grid_attach(GTK_GRID(grid),b_snb,2,3,2,1);
-  g_signal_connect(b_snb,"toggled",G_CALLBACK(snb_cb),NULL);
+  gtk_grid_attach(GTK_GRID(grid),b_snb,2,4,2,1);
+  g_signal_connect(b_snb,"pressed",G_CALLBACK(snb_cb),NULL);
 
   gtk_container_add(GTK_CONTAINER(content),grid);
+
   GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK);
   //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 16"));
   gtk_widget_show_all(dialog);
@@ -549,78 +415,6 @@ static void audio_cb(GtkWidget *widget, gpointer data) {
 
 }
 
-void set_drive(double value) {
-  setDrive(value);
-  if(display_sliders) {
-    gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0);
-  } else {
-    if(scale_status!=DRIVE) {
-      if(scale_status!=NONE) {
-        g_source_remove(scale_timer);
-        gtk_widget_destroy(scale_dialog);
-        scale_status=NONE;
-      }
-    }
-    if(scale_status==NONE) {
-      scale_status=DRIVE;
-      scale_dialog=gtk_dialog_new_with_buttons("Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
-      drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
-      gtk_widget_set_size_request (drive_scale, 400, 30);
-      gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0);
-      gtk_widget_show(drive_scale);
-      gtk_container_add(GTK_CONTAINER(content),drive_scale);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-      //gtk_widget_show_all(scale_dialog);
-      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
-    } else {
-      g_source_remove(scale_timer);
-      gtk_range_set_value (GTK_RANGE(drive_scale),value*100.0);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-    }
-  }
-}
-
-static void drive_value_changed_cb(GtkWidget *widget, gpointer data) {
-  setDrive(gtk_range_get_value(GTK_RANGE(drive_scale))/100.0);
-}
-
-void set_tune(double value) {
-  setTuneDrive(value);
-  if(display_sliders) {
-    gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0);
-  } else {
-    if(scale_status!=TUNE_DRIVE) {
-      if(scale_status!=NONE) {
-        g_source_remove(scale_timer);
-        gtk_widget_destroy(scale_dialog);
-        scale_status=NONE;
-      }
-    }
-    if(scale_status==NONE) {
-      scale_status=TUNE_DRIVE;
-      scale_dialog=gtk_dialog_new_with_buttons("Tune Drive",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
-      GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(scale_dialog));
-      tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
-      gtk_widget_set_size_request (tune_scale, 400, 30);
-      gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0);
-      gtk_widget_show(tune_scale);
-      gtk_container_add(GTK_CONTAINER(content),tune_scale);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-      //gtk_widget_show_all(scale_dialog);
-      int result=gtk_dialog_run(GTK_DIALOG(scale_dialog));
-    } else {
-      g_source_remove(scale_timer);
-      gtk_range_set_value (GTK_RANGE(tune_scale),value*100.0);
-      scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL);
-    }
-  }
-}
-
-static void tune_value_changed_cb(GtkWidget *widget, gpointer data) {
-  setTuneDrive(gtk_range_get_value(GTK_RANGE(tune_scale))/100.0);
-}
-
 static void stop() {
   if(protocol==ORIGINAL_PROTOCOL) {
     old_protocol_stop();
@@ -973,92 +767,180 @@ void tune_cb(GtkWidget *widget, gpointer data) {
   }
 }
 
-GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent) {
-    width=my_width;
-    height=my_height;
-    parent_window=parent;
+void sim_band_cb(GtkWidget *widget, gpointer data) {
+  BAND* band;
+  BANDSTACK_ENTRY *entry;
+fprintf(stderr,"sim_band_cb\n");
+  int b=band_get_current();
+  if(function) {
+    b--;
+    if(b<0) {
+      b=BANDS-1;
+    }
+  } else {
+    b++;
+    if(b>=BANDS) {
+      b=0;
+    }
+  }
+  band=band_set_current(b);
+  entry=bandstack_entry_get_current();
+
+  setFrequency(entry->frequencyA);
+  setMode(entry->mode);
+  FILTER* band_filters=filters[entry->mode];
+  FILTER* band_filter=&band_filters[entry->filter];
+  setFilter(band_filter->low,band_filter->high);
 
-    fprintf(stderr,"sliders_init: width=%d height=%d\n", width,height);
-
-    sliders=gtk_grid_new();
-    gtk_widget_set_size_request (sliders, width, height);
-    gtk_grid_set_row_homogeneous(GTK_GRID(sliders), FALSE);
-    gtk_grid_set_column_homogeneous(GTK_GRID(sliders),TRUE);
-
-  af_gain_label=gtk_label_new("AF:");
-  //gtk_widget_override_font(af_gain_label, pango_font_description_from_string("Arial 16"));
-  gtk_widget_show(af_gain_label);
-  gtk_grid_attach(GTK_GRID(sliders),af_gain_label,0,0,1,1);
-
-  af_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.00);
-  gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
-  gtk_widget_show(af_gain_scale);
-  gtk_grid_attach(GTK_GRID(sliders),af_gain_scale,1,0,2,1);
-  g_signal_connect(G_OBJECT(af_gain_scale),"value_changed",G_CALLBACK(afgain_value_changed_cb),NULL);
-
-  agc_gain_label=gtk_label_new("AGC:");
-  //gtk_widget_override_font(agc_gain_label, pango_font_description_from_string("Arial 16"));
-  gtk_widget_show(agc_gain_label);
-  gtk_grid_attach(GTK_GRID(sliders),agc_gain_label,3,0,1,1);
-
-  agc_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 120.0, 1.0);
-  gtk_range_set_value (GTK_RANGE(agc_scale),agc_gain);
-  gtk_widget_show(agc_scale);
-  gtk_grid_attach(GTK_GRID(sliders),agc_scale,4,0,2,1);
-  g_signal_connect(G_OBJECT(agc_scale),"value_changed",G_CALLBACK(agcgain_value_changed_cb),NULL);
-
-  attenuation_label=gtk_label_new("ATT (dB):");
-  //gtk_widget_override_font(attenuation_label, pango_font_description_from_string("Arial 16"));
-  gtk_widget_show(attenuation_label);
-  gtk_grid_attach(GTK_GRID(sliders),attenuation_label,6,0,1,1);
-
-  attenuation_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 31.0, 1.0);
-  gtk_range_set_value (GTK_RANGE(attenuation_scale),attenuation);
-  gtk_widget_show(attenuation_scale);
-  gtk_grid_attach(GTK_GRID(sliders),attenuation_scale,7,0,2,1);
-  g_signal_connect(G_OBJECT(attenuation_scale),"value_changed",G_CALLBACK(attenuation_value_changed_cb),NULL);
-
-
-
-  mic_gain_label=gtk_label_new("Mic:");
-  //gtk_widget_override_font(mic_gain_label, pango_font_description_from_string("Arial 16"));
-  gtk_widget_show(mic_gain_label);
-  gtk_grid_attach(GTK_GRID(sliders),mic_gain_label,0,1,1,1);
-
-  mic_gain_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0);
-  gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*MIC_GAIN_FUDGE);
-  gtk_widget_show(mic_gain_scale);
-  gtk_grid_attach(GTK_GRID(sliders),mic_gain_scale,1,1,2,1);
-  g_signal_connect(G_OBJECT(mic_gain_scale),"value_changed",G_CALLBACK(micgain_value_changed_cb),NULL);
-
-  drive_label=gtk_label_new("Drive:");
-  //gtk_widget_override_font(drive_label, pango_font_description_from_string("Arial 16"));
-  gtk_widget_show(drive_label);
-  gtk_grid_attach(GTK_GRID(sliders),drive_label,3,1,1,1);
-
-  drive_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0);
-  gtk_range_set_value (GTK_RANGE(drive_scale),getDrive()*100.0);
-  gtk_widget_show(drive_scale);
-  gtk_grid_attach(GTK_GRID(sliders),drive_scale,4,1,2,1);
-  g_signal_connect(G_OBJECT(drive_scale),"value_changed",G_CALLBACK(drive_value_changed_cb),NULL);
-
-  tune_label=gtk_label_new("Tune:");
-  //gtk_widget_override_font(tune_label, pango_font_description_from_string("Arial 16"));
-  gtk_widget_show(tune_label);
-  gtk_grid_attach(GTK_GRID(sliders),tune_label,6,1,1,1);
-
-  tune_scale=gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,0.0, 100.0, 1.0);
-  gtk_range_set_value (GTK_RANGE(tune_scale),getTuneDrive()*100.0);
-  gtk_widget_show(tune_scale);
-  gtk_grid_attach(GTK_GRID(sliders),tune_scale,7,1,2,1);
-  g_signal_connect(G_OBJECT(tune_scale),"value_changed",G_CALLBACK(tune_value_changed_cb),NULL);
-
-  dummy_label=gtk_label_new(" ");
-  //gtk_widget_override_font(dummy_label, pango_font_description_from_string("Arial 16"));
-  gtk_widget_show(dummy_label);
-  gtk_grid_attach(GTK_GRID(sliders),dummy_label,9,1,1,1);
-
-  return sliders;
+  band=band_get_current_band();
+  set_alex_rx_antenna(band->alexRxAntenna);
+  set_alex_tx_antenna(band->alexTxAntenna);
+  set_alex_attenuation(band->alexAttenuation);
+  vfo_update(NULL);
+}
+
+void sim_bandstack_cb(GtkWidget *widget, gpointer data) {
+  BANDSTACK_ENTRY *entry;
+  fprintf(stderr,"sim_bandstack_cb\n");
+  if(function) {
+    entry=bandstack_entry_previous();
+  } else {
+    entry=bandstack_entry_next();
+  }
+  setFrequency(entry->frequencyA);
+  setMode(entry->mode);
+  FILTER* band_filters=filters[entry->mode];
+  FILTER* band_filter=&band_filters[entry->filter];
+  setFilter(band_filter->low,band_filter->high);
+  vfo_update(NULL);
+}
+
+void sim_mode_cb(GtkWidget *widget, gpointer data) {
+  BAND* band;
+  BANDSTACK_ENTRY *entry;
+
+fprintf(stderr,"sim_mode_cb\n");
+  band=band_get_current_band();
+  entry=bandstack_entry_get_current();
+  if(function) {
+    entry->mode--;
+    if(entry->mode<0) {
+      entry->mode=MODES-1;
+    }
+  } else {
+    entry->mode++;
+    if(entry->mode>=MODES) {
+      entry->mode=0;
+    }
+  }
+  setMode(entry->mode);
+
+  FILTER* band_filters=filters[entry->mode];
+  FILTER* band_filter=&band_filters[entry->filter];
+  setFilter(band_filter->low,band_filter->high);
+
+  vfo_update(NULL);
+}
+
+void sim_filter_cb(GtkWidget *widget, gpointer data) {
+  BAND* band;
+  BANDSTACK_ENTRY *entry;
+
+fprintf(stderr,"sim_filter_cb\n");
+  band=band_get_current_band();
+  entry=bandstack_entry_get_current();
+  // note order of filter reversed (largest first)
+  if(function) {
+    entry->filter++;
+    if(entry->filter>=FILTERS) {
+      entry->filter=0;
+    }
+  } else {
+    entry->filter--;
+    if(entry->filter<0) {
+      entry->filter=FILTERS-1;
+    }
+  }
+
+  FILTER* band_filters=filters[entry->mode];
+  FILTER* band_filter=&band_filters[entry->filter];
+  setFilter(band_filter->low,band_filter->high);
+
+  vfo_update(NULL);
+
+}
+
+void sim_agc_cb(GtkWidget *widget, gpointer data) {
+  fprintf(stderr,"sim_agc_cb\n");
+  if(function) {
+    agc--;
+    if(agc<0) {
+      agc=3;
+    }
+  } else {
+    agc++;
+    if(agc>=4) {
+      agc=0;
+    }
+  }
+  SetRXAAGCMode(CHANNEL_RX0, agc);
+  vfo_update(NULL);
+}
+
+void sim_noise_cb(GtkWidget *widget, gpointer data) {
+  fprintf(stderr,"sim_noise_cb\n");
+  if(function) {
+    if(nr) {
+      nr=0;
+    } else if(nr2) {
+      nr2=0;
+      nr=1;
+    } else if(anf) {
+      anf=0;
+      nr2=1;
+    } else if(snb) {
+      snb=0;
+      anf=1;
+    } else {
+      snb=1;
+    }
+  } else {
+    if(nr) {
+      nr=0;
+      nr2=1;
+    } else if(nr2) {
+      nr2=0;
+      anf=1;
+    } else if(anf) {
+      anf=0;
+      snb=1;
+    } else if(snb) {
+      snb=0;
+    } else {
+      nr=1;
+    }
+  }
+  SetRXAANRRun(CHANNEL_RX0, nr);
+  SetRXAEMNRRun(CHANNEL_RX0, nr2);
+  SetRXAANFRun(CHANNEL_RX0, anf);
+  SetRXASNBARun(CHANNEL_RX0, snb);
+  vfo_update(NULL);
+
+}
+
+void sim_function_cb(GtkWidget *widget, gpointer data) {
+  fprintf(stderr,"sim_function_cb\n");
+  function=function==1?0:1;
+  vfo_update(NULL);
+}
+
+void sim_mox_cb(GtkWidget *widget, gpointer data) {
+  fprintf(stderr,"sim_pressed\n");
+  if(function) {
+    tune_cb((GtkWidget *)NULL, (gpointer)NULL);
+  } else {
+    mox_cb((GtkWidget *)NULL, (gpointer)NULL);
+  }
 }
 
 GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent) {
@@ -1084,41 +966,86 @@ GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent) {
     gtk_widget_set_size_request (toolbar, width, height);
     gtk_grid_set_column_homogeneous(GTK_GRID(toolbar),TRUE);
 
-    GtkWidget *band=gtk_button_new_with_label("Band");
-    gtk_widget_set_size_request (band, button_width, 0);
-    //gtk_widget_override_font(band, pango_font_description_from_string("Arial 16"));
-    g_signal_connect(G_OBJECT(band),"clicked",G_CALLBACK(band_cb),NULL);
-    gtk_grid_attach(GTK_GRID(toolbar),band,0,0,4,1);
-
-    GtkWidget *mode=gtk_button_new_with_label("Mode");
-    //gtk_widget_override_font(mode, pango_font_description_from_string("Arial 16"));
-    g_signal_connect(G_OBJECT(mode),"clicked",G_CALLBACK(mode_cb),NULL);
-    gtk_grid_attach(GTK_GRID(toolbar),mode,4,0,4,1);
-
-    GtkWidget *filter=gtk_button_new_with_label("Filter");
-    //gtk_widget_override_font(filter, pango_font_description_from_string("Arial 16"));
-    g_signal_connect(G_OBJECT(filter),"clicked",G_CALLBACK(filter_cb),NULL);
-    gtk_grid_attach(GTK_GRID(toolbar),filter,8,0,4,1);
-
-    GtkWidget *audio=gtk_button_new_with_label("Audio");
-    //gtk_widget_override_font(audio, pango_font_description_from_string("Arial 16"));
-    g_signal_connect(G_OBJECT(audio),"clicked",G_CALLBACK(audio_cb),NULL);
-    gtk_grid_attach(GTK_GRID(toolbar),audio,12,0,4,1);
-
-    GtkWidget *lock=gtk_button_new_with_label("Lock");
-    //gtk_widget_override_font(lock, pango_font_description_from_string("Arial 16"));
-    g_signal_connect(G_OBJECT(lock),"clicked",G_CALLBACK(lock_cb),NULL);
-    gtk_grid_attach(GTK_GRID(toolbar),lock,16,0,4,1);
-
-    GtkWidget *tune=gtk_button_new_with_label("Tune");
-    //gtk_widget_override_font(tune, pango_font_description_from_string("Arial 16"));
-    g_signal_connect(G_OBJECT(tune),"clicked",G_CALLBACK(tune_cb),NULL);
-    gtk_grid_attach(GTK_GRID(toolbar),tune,24,0,4,1);
-
-    GtkWidget *tx=gtk_button_new_with_label("Mox");
-    //gtk_widget_override_font(tx, pango_font_description_from_string("Arial 16"));
-    g_signal_connect(G_OBJECT(tx),"clicked",G_CALLBACK(mox_cb),NULL);
-    gtk_grid_attach(GTK_GRID(toolbar),tx,28,0,4,1);
+    if(toolbar_simulate_buttons) {
+      GtkWidget *band=gtk_button_new_with_label("Band");
+      gtk_widget_set_size_request (band, button_width, 0);
+      //gtk_widget_override_font(band, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(band),"clicked",G_CALLBACK(sim_band_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),band,0,0,4,1);
+
+      GtkWidget *bandstack=gtk_button_new_with_label("BStack");
+      gtk_widget_set_size_request (bandstack, button_width, 0);
+      //gtk_widget_override_font(bandstack, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(bandstack),"clicked",G_CALLBACK(sim_bandstack_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),bandstack,4,0,4,1);
+
+      GtkWidget *mode=gtk_button_new_with_label("Mode");
+      //gtk_widget_override_font(mode, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(mode),"clicked",G_CALLBACK(sim_mode_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),mode,8,0,4,1);
+
+      GtkWidget *filter=gtk_button_new_with_label("Filter");
+      //gtk_widget_override_font(filter, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(filter),"clicked",G_CALLBACK(sim_filter_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),filter,12,0,4,1);
+
+      GtkWidget *agc=gtk_button_new_with_label("AGC");
+      //gtk_widget_override_font(agc, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(agc),"clicked",G_CALLBACK(sim_agc_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),agc,16,0,4,1);
+
+      GtkWidget *noise=gtk_button_new_with_label("Noise");
+      //gtk_widget_override_font(noise, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(noise),"clicked",G_CALLBACK(sim_noise_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),noise,20,0,4,1);
+
+      GtkWidget *function=gtk_button_new_with_label("Function");
+      //gtk_widget_override_font(function, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(function),"clicked",G_CALLBACK(sim_function_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),function,24,0,4,1);
+
+      GtkWidget *mox=gtk_button_new_with_label("Mox");
+      //gtk_widget_override_font(mox, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(mox),"clicked",G_CALLBACK(sim_mox_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),mox,28,0,4,1);
+
+    } else {
+      GtkWidget *band=gtk_button_new_with_label("Band");
+      gtk_widget_set_size_request (band, button_width, 0);
+      //gtk_widget_override_font(band, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(band),"clicked",G_CALLBACK(band_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),band,0,0,4,1);
+
+      GtkWidget *mode=gtk_button_new_with_label("Mode");
+      //gtk_widget_override_font(mode, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(mode),"clicked",G_CALLBACK(mode_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),mode,4,0,4,1);
+
+      GtkWidget *filter=gtk_button_new_with_label("Filter");
+      //gtk_widget_override_font(filter, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(filter),"clicked",G_CALLBACK(filter_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),filter,8,0,4,1);
+
+      GtkWidget *audio=gtk_button_new_with_label("Audio");
+      //gtk_widget_override_font(audio, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(audio),"clicked",G_CALLBACK(audio_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),audio,12,0,4,1);
+
+      GtkWidget *lock=gtk_button_new_with_label("Lock");
+      //gtk_widget_override_font(lock, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(lock),"clicked",G_CALLBACK(lock_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),lock,16,0,4,1);
+
+      GtkWidget *tune=gtk_button_new_with_label("Tune");
+      //gtk_widget_override_font(tune, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(tune),"clicked",G_CALLBACK(tune_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),tune,24,0,4,1);
+
+      GtkWidget *tx=gtk_button_new_with_label("Mox");
+      //gtk_widget_override_font(tx, pango_font_description_from_string("Arial 16"));
+      g_signal_connect(G_OBJECT(tx),"clicked",G_CALLBACK(mox_cb),NULL);
+      gtk_grid_attach(GTK_GRID(toolbar),tx,28,0,4,1);
+    }
 
     gtk_widget_show_all(toolbar);
 
index fbf2fdfcd2eba5b1f303b09e2727b5e85a6061cb..6b393814a29c873cb38c71cb2b9f8959a1ac53ee 100644 (file)
--- a/toolbar.h
+++ b/toolbar.h
 *
 */
 
-void set_agc_gain(double value);
-void set_af_gain(double value);
-void set_mic_gain(double value);
-void set_drive(double drive);
-void set_tune(double tune);
-void set_attenuation_value(double attenuation);
 int ptt_update(void *data);
 void lock_cb(GtkWidget *widget, gpointer data);
 void mox_cb(GtkWidget *widget, gpointer data);
 void tune_cb(GtkWidget *widget, gpointer data);
 GtkWidget *toolbar_init(int my_width, int my_height, GtkWidget* parent);
-GtkWidget *sliders_init(int my_width, int my_height, GtkWidget* parent);