GLUI: enforce min/max values for auto tune parameters
authorStefan Westerfeld <stefan@space.twc.de>
Wed, 13 Mar 2019 16:34:39 +0000 (17:34 +0100)
committerStefan Westerfeld <stefan@space.twc.de>
Wed, 13 Mar 2019 16:34:39 +0000 (17:34 +0100)
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
glui/sminsteditparams.hh
glui/smparamlabel.hh

index 5214dc7..0bcdb5d 100644 (file)
@@ -65,10 +65,10 @@ public:
     /*--- auto volume gain ---*/
     auto_volume_gain_label = new Label (scroll_widget, "Gain");
 
-    auto pd = new ParamLabelModelDouble (instrument->auto_volume().gain, "%.2f", "%.2f dB");
-    auto_volume_gain_param_label = new ParamLabel (scroll_widget, pd);
+    auto gain_mod = new ParamLabelModelDouble (instrument->auto_volume().gain, -48.0, 48.0, "%.2f", "%.2f dB");
+    auto_volume_gain_param_label = new ParamLabel (scroll_widget, gain_mod);
 
-    connect (pd->signal_value_changed, this, &InstEditParams::on_auto_volume_gain_changed);
+    connect (gain_mod->signal_value_changed, this, &InstEditParams::on_auto_volume_gain_changed);
 
     auto_tune_checkbox = new CheckBox (scroll_widget, "Auto Tune");
     connect (auto_tune_checkbox->signal_toggled, this, &InstEditParams::on_auto_tune_changed);
@@ -85,16 +85,15 @@ public:
     /*--- auto tune partials ---*/
     auto_tune_partials_label = new Label (scroll_widget, "Partials");
 
-    auto pmod = new ParamLabelModelInt();
-    pmod->i = instrument->auto_tune().partials;
-    auto_tune_partials_param_label = new ParamLabel (scroll_widget, pmod);
+    auto partials_mod = new ParamLabelModelInt (instrument->auto_tune().partials, 1, 3);
+    auto_tune_partials_param_label = new ParamLabel (scroll_widget, partials_mod);
 
-    connect (pmod->signal_value_changed, this, &InstEditParams::on_auto_tune_partials_changed);
+    connect (partials_mod->signal_value_changed, this, &InstEditParams::on_auto_tune_partials_changed);
 
     /*--- auto tune time ---*/
     auto_tune_time_label = new Label (scroll_widget, "Time");
 
-    auto time_mod = new ParamLabelModelDouble (instrument->auto_tune().time, "%.2f", "%.2f ms");
+    auto time_mod = new ParamLabelModelDouble (instrument->auto_tune().time, 1, 2000, "%.2f", "%.2f ms");
     auto_tune_time_param_label = new ParamLabel (scroll_widget, time_mod);
 
     connect (time_mod->signal_value_changed, this, &InstEditParams::on_auto_tune_time_changed);
@@ -102,7 +101,7 @@ public:
     /*--- auto tune amount ---*/
     auto_tune_amount_label = new Label (scroll_widget, "Amount");
 
-    auto amount_mod = new ParamLabelModelDouble (instrument->auto_tune().amount, "%.1f", "%.1f %%");
+    auto amount_mod = new ParamLabelModelDouble (instrument->auto_tune().amount, 0, 100, "%.1f", "%.1f %%");
     auto_tune_amount_param_label = new ParamLabel (scroll_widget, amount_mod);
 
     connect (time_mod->signal_value_changed, this, &InstEditParams::on_auto_tune_amount_changed);
index de39472..0e9667f 100644 (file)
@@ -18,59 +18,77 @@ public:
 
 class ParamLabelModelDouble : public ParamLabelModel
 {
+  double value;
+  double min_value;
+  double max_value;
+
   std::string value_fmt;
   std::string display_fmt;
-public:
-  double db = 0;
 
-  ParamLabelModelDouble (double start, const std::string& value_fmt, const std::string& display_fmt) :
+public:
+  ParamLabelModelDouble (double start, double min_val, double max_val, const std::string& value_fmt, const std::string& display_fmt) :
+    value (start),
+    min_value (min_val),
+    max_value (max_val),
     value_fmt (value_fmt),
-    display_fmt (display_fmt),
-    db (start)
+    display_fmt (display_fmt)
   {
   }
 
   std::string
   value_text()
   {
-    return string_locale_printf (value_fmt.c_str(), db);
+    return string_locale_printf (value_fmt.c_str(), value);
   }
   std::string
   display_text()
   {
-    return string_locale_printf (display_fmt.c_str(), db);
+    return string_locale_printf (display_fmt.c_str(), value);
   }
   void
   set_value_text (const std::string& t)
   {
-    db = atof (t.c_str());
+    value = atof (t.c_str());
+
+    value = sm_bound (min_value, value, max_value);
 
-    signal_value_changed (db);
+    signal_value_changed (value);
   }
   Signal<double> signal_value_changed;
 };
 
 class ParamLabelModelInt : public ParamLabelModel
 {
+  int value;
+  int min_value;
+  int max_value;
+
 public:
-  int i = 0;
+  ParamLabelModelInt (int i, int min_value, int max_value) :
+    value (i),
+    min_value (min_value),
+    max_value (max_value)
+  {
+  }
 
   std::string
   value_text()
   {
-    return string_locale_printf ("%d", i);
+    return string_locale_printf ("%d", value);
   }
   std::string
   display_text()
   {
-    return string_locale_printf ("%d", i);
+    return string_locale_printf ("%d", value);
   }
   void
   set_value_text (const std::string& t)
   {
-    i = atoi (t.c_str());
+    value = atoi (t.c_str());
+
+    value = sm_bound (min_value, value, max_value);
 
-    signal_value_changed (i);
+    signal_value_changed (value);
   }
   Signal<int> signal_value_changed;
 };