7cfc845ce05faa60688e2c0036affbe8988d040a
[spectmorph.git] / glui / sminsteditparams.hh
1 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
2
3 #ifndef SPECTMORPH_INST_EDIT_PARAMS_HH
4 #define SPECTMORPH_INST_EDIT_PARAMS_HH
5
6 #include "smcheckbox.hh"
7
8 namespace SpectMorph
9 {
10
11 class InstEditParams : public Window
12 {
13   Instrument *instrument = nullptr;
14
15   CheckBox   *auto_volume_checkbox = nullptr;
16   ComboBox   *auto_volume_method_combobox = nullptr;
17
18   CheckBox   *auto_tune_checkbox = nullptr;
19 public:
20   InstEditParams (Window *window, Instrument *instrument) :
21     Window ("Instrument Params", 320, 400, 0, false, window->native_window()),
22     instrument (instrument)
23   {
24     window->add_child_window (this);
25     set_close_callback ([this,window]() { window->remove_child_window (this); });
26
27     FixedGrid grid;
28     auto_volume_checkbox = new CheckBox (this, "Auto Volume");
29     connect (auto_volume_checkbox->signal_toggled, this, &InstEditParams::on_auto_volume_changed);
30     grid.add_widget (auto_volume_checkbox, 2, 2, 20, 2);
31
32     /*--- play mode ---*/
33     auto_volume_method_combobox = new ComboBox (this);
34     connect (auto_volume_method_combobox->signal_item_changed, this, &InstEditParams::on_auto_volume_method_changed);
35     grid.add_widget (new Label (this, "Method"), 4, 4, 10, 3);
36     grid.add_widget (auto_volume_method_combobox, 13, 4, 24, 3);
37     auto_volume_method_combobox->add_item ("From Loop"); // default
38     auto_volume_method_combobox->add_item ("Global");
39
40     connect (instrument->signal_global_changed, this, &InstEditParams::on_global_changed);
41
42     auto_tune_checkbox = new CheckBox (this, "Auto Tune");
43     connect (auto_tune_checkbox->signal_toggled, this, &InstEditParams::on_auto_tune_changed);
44     grid.add_widget (auto_tune_checkbox, 2, 7, 20, 2);
45
46     on_global_changed();
47
48     show();
49   }
50   void
51   on_global_changed()
52   {
53     auto_volume_checkbox->set_checked (instrument->auto_volume().enabled);
54     auto_tune_checkbox->set_checked (instrument->auto_tune().enabled);
55
56     if (instrument->auto_volume().method == Instrument::AutoVolume::GLOBAL)
57       auto_volume_method_combobox->set_text ("Global");
58     else
59       auto_volume_method_combobox->set_text ("From Loop");
60   }
61   void
62   on_auto_volume_changed (bool new_value)
63   {
64     Instrument::AutoVolume av = instrument->auto_volume();
65     av.enabled = new_value;
66
67     instrument->set_auto_volume (av);
68   }
69   void
70   on_auto_volume_method_changed()
71   {
72     Instrument::AutoVolume av = this->instrument->auto_volume();
73
74     int idx = auto_volume_method_combobox->current_index();
75     if (idx == 0)
76       av.method = Instrument::AutoVolume::FROM_LOOP;
77     else
78       av.method = Instrument::AutoVolume::GLOBAL;
79
80     this->instrument->set_auto_volume (av);
81   }
82   void
83   on_auto_tune_changed (bool new_value)
84   {
85     auto at = instrument->auto_tune();
86     at.enabled = new_value;
87
88     instrument->set_auto_tune (at);
89   }
90 };
91
92 }
93
94 #endif