GLUI: make auto tune partials editable
authorStefan Westerfeld <stefan@space.twc.de>
Wed, 13 Mar 2019 15:38:56 +0000 (16:38 +0100)
committerStefan Westerfeld <stefan@space.twc.de>
Wed, 13 Mar 2019 15:38:56 +0000 (16:38 +0100)
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
glui/sminsteditparams.hh
glui/smparamlabel.hh

index e6c4ead..dc1a443 100644 (file)
@@ -23,6 +23,10 @@ class InstEditParams : public Window
   CheckBox   *auto_tune_checkbox = nullptr;
   ComboBox   *auto_tune_method_combobox = nullptr;
   Label      *auto_tune_method_label = nullptr;
+  Label      *auto_tune_partials_label = nullptr;
+  ParamLabel *auto_tune_partials_param_label = nullptr;
+  Label      *auto_tune_time_label = nullptr;
+  Label      *auto_tune_amount_label = nullptr;
 
   CheckBox   *enc_cfg_checkbox = nullptr;
   std::vector<Widget *> enc_widgets;
@@ -74,6 +78,18 @@ public:
     auto_tune_method_combobox->add_item ("All Frames");
     auto_tune_method_combobox->add_item ("Smooth");
 
+    /*--- 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);
+
+    connect (pmod->signal_value_changed, this, &InstEditParams::on_auto_tune_partials_changed);
+
+    auto_tune_time_label = new Label (scroll_widget, "Time");
+    auto_tune_amount_label = new Label (scroll_widget, "Amount");
+
     enc_cfg_checkbox = new CheckBox (scroll_widget, "Custom Analysis Parameters");
     connect (enc_cfg_checkbox->signal_toggled, this, &InstEditParams::on_enc_cfg_changed);
 
@@ -112,6 +128,15 @@ public:
     const auto auto_tune = instrument->auto_tune();
     auto_tune_method_label->set_visible (auto_tune.enabled);
     auto_tune_method_combobox->set_visible (auto_tune.enabled);
+
+    auto_tune_partials_label->set_visible (auto_tune.enabled &&
+      (auto_tune.method == Instrument::AutoTune::ALL_FRAMES || auto_tune.method == Instrument::AutoTune::SMOOTH));
+    auto_tune_partials_param_label->set_visible (auto_tune_partials_label->visible());
+
+    auto_tune_time_label->set_visible (auto_tune.enabled && auto_tune.method == Instrument::AutoTune::SMOOTH);
+
+    auto_tune_amount_label->set_visible (auto_tune.enabled && auto_tune.method == Instrument::AutoTune::SMOOTH);
+
     grid.add_widget (auto_tune_checkbox, 0, y, 20, 2);
     y += 2;
     if (auto_tune.enabled)
@@ -119,6 +144,22 @@ public:
         grid.add_widget (auto_tune_method_label, 2, y, 10, 3);
         grid.add_widget (auto_tune_method_combobox, 11, y, 23, 3);
         y += 3;
+        if (auto_tune_partials_label->visible())
+          {
+            grid.add_widget (auto_tune_partials_label, 2, y, 10, 3);
+            grid.add_widget (auto_tune_partials_param_label, 11, y, 10, 3);
+            y += 3;
+          }
+        if(auto_tune_time_label->visible())
+          {
+            grid.add_widget (auto_tune_time_label, 2, y, 10, 3);
+            y += 3;
+          }
+        if (auto_tune_amount_label->visible())
+          {
+            grid.add_widget (auto_tune_amount_label, 2, y, 10, 3);
+            y += 3;
+          }
       }
     grid.add_widget (enc_cfg_checkbox, 0, y, 30, 2);
     y += 2;
@@ -240,6 +281,14 @@ public:
     instrument->set_auto_tune (at);
   }
   void
+  on_auto_tune_partials_changed (int p)
+  {
+    auto at = instrument->auto_tune();
+    at.partials = p;
+
+    instrument->set_auto_tune (at);
+  }
+  void
   on_enc_cfg_changed (bool new_value)
   {
     auto enc_cfg = instrument->encoder_config();
index 7d5ed23..9344b75 100644 (file)
@@ -41,6 +41,31 @@ public:
   Signal<double> signal_value_changed;
 };
 
+class ParamLabelModelInt : public ParamLabelModel
+{
+public:
+  int i = 0;
+
+  std::string
+  value_text()
+  {
+    return string_locale_printf ("%d", i);
+  }
+  std::string
+  display_text()
+  {
+    return string_locale_printf ("%d", i);
+  }
+  void
+  set_value_text (const std::string& t)
+  {
+    i = atoi (t.c_str());
+
+    signal_value_changed (i);
+  }
+  Signal<int> signal_value_changed;
+};
+
 class ParamLabelModelString : public ParamLabelModel
 {
 public: