X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fgeneric_midi%2Fgmcp_gui.cc;h=6c1ee1ba3d3e340c281fd42c857ee659ccc111c4;hb=1ab61b8564f9934c533d1c1a229888bc7e2fd557;hp=88ba20a78e9975c55fc587ce45a5bf9f54b64afb;hpb=e70249ab658ef1b02da01d84bf2d9b46847e5194;p=ardour.git diff --git a/libs/surfaces/generic_midi/gmcp_gui.cc b/libs/surfaces/generic_midi/gmcp_gui.cc index 88ba20a78e..6c1ee1ba3d 100644 --- a/libs/surfaces/generic_midi/gmcp_gui.cc +++ b/libs/surfaces/generic_midi/gmcp_gui.cc @@ -1,3 +1,22 @@ +/* + Copyright (C) 2009-2012 Paul Davis + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + #include #include #include @@ -7,7 +26,9 @@ #include #include #include +#include +#include "gtkmm2ext/gtk_ui.h" #include "gtkmm2ext/utils.h" #include "generic_midi_control_protocol.h" @@ -17,17 +38,22 @@ class GMCPGUI : public Gtk::VBox { public: - GMCPGUI (GenericMidiControlProtocol&); - ~GMCPGUI (); - + GMCPGUI (GenericMidiControlProtocol&); + ~GMCPGUI (); + private: - GenericMidiControlProtocol& cp; - Gtk::ComboBoxText map_combo; - Gtk::Adjustment bank_adjustment; - Gtk::SpinButton bank_spinner; - - void binding_changed (); - void bank_change (); + GenericMidiControlProtocol& cp; + Gtk::ComboBoxText map_combo; + Gtk::Adjustment bank_adjustment; + Gtk::SpinButton bank_spinner; + Gtk::CheckButton motorised_button; + Gtk::Adjustment threshold_adjustment; + Gtk::SpinButton threshold_spinner; + + void binding_changed (); + void bank_changed (); + void motorised_changed (); + void threshold_changed (); }; using namespace PBD; @@ -63,12 +89,15 @@ GMCPGUI::GMCPGUI (GenericMidiControlProtocol& p) : cp (p) , bank_adjustment (1, 1, 100, 1, 10) , bank_spinner (bank_adjustment) + , motorised_button ("Motorised") + , threshold_adjustment (p.threshold(), 1, 127, 1, 10) + , threshold_spinner (threshold_adjustment) { vector popdowns; popdowns.push_back (_("Reset All")); for (list::iterator x = cp.map_info.begin(); x != cp.map_info.end(); ++x) { - popdowns.push_back ((*x).name); + popdowns.push_back (x->name); } set_popdown_strings (map_combo, popdowns); @@ -82,38 +111,58 @@ GMCPGUI::GMCPGUI (GenericMidiControlProtocol& p) map_combo.signal_changed().connect (sigc::mem_fun (*this, &GMCPGUI::binding_changed)); set_spacing (6); - set_border_width (12); - - Label* label = manage (new Label (_("Available MIDI bindings:"))); - HBox* hpack = manage (new HBox); + set_border_width (6); - hpack->set_spacing (6); - hpack->pack_start (*label, false, false); - hpack->pack_start (map_combo, false, false); + Table* table = manage (new Table); + table->set_row_spacings (6); + table->set_col_spacings (6); + table->show (); + + int n = 0; + Label* label = manage (new Label (_("MIDI Bindings:"))); + label->set_alignment (0, 0.5); + table->attach (*label, 0, 1, n, n + 1); + table->attach (map_combo, 1, 2, n, n + 1); + ++n; + map_combo.show (); label->show (); - hpack->show (); - pack_start (*hpack, false, false); + bank_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &GMCPGUI::bank_changed)); + + label = manage (new Label (_("Current Bank:"))); + label->set_alignment (0, 0.5); + table->attach (*label, 0, 1, n, n + 1); + table->attach (bank_spinner, 1, 2, n, n + 1); + ++n; + + bank_spinner.show (); + label->show (); + motorised_button.signal_toggled().connect (sigc::mem_fun (*this, &GMCPGUI::motorised_changed)); + table->attach (motorised_button, 0, 2, n, n + 1); + ++n; - bank_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &GMCPGUI::bank_change)); + motorised_button.show (); - label = manage (new Label (_("Current Bank:"))); - hpack = manage (new HBox); + threshold_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &GMCPGUI::threshold_changed)); - hpack->set_spacing (6); - hpack->pack_start (*label, false, false); - hpack->pack_start (bank_spinner, false, false); + Gtkmm2ext::UI::instance()->set_tip (threshold_spinner, + string_compose (_("Controls how %1 behaves if the MIDI controller sends discontinuous values"), PROGRAM_NAME)); + label = manage (new Label (_("Smoothing:"))); + label->set_alignment (0, 0.5); + table->attach (*label, 0, 1, n, n + 1); + table->attach (threshold_spinner, 1, 2, n, n + 1); + ++n; - bank_spinner.show (); + threshold_spinner.show (); label->show (); - hpack->show (); - pack_start (*hpack, false, false); + pack_start (*table, false, false); + binding_changed (); } GMCPGUI::~GMCPGUI () @@ -121,7 +170,7 @@ GMCPGUI::~GMCPGUI () } void -GMCPGUI::bank_change () +GMCPGUI::bank_changed () { int new_bank = bank_adjustment.get_value() - 1; cp.set_current_bank (new_bank); @@ -136,10 +185,24 @@ GMCPGUI::binding_changed () cp.drop_bindings (); } else { for (list::iterator x = cp.map_info.begin(); x != cp.map_info.end(); ++x) { - if (str == (*x).name) { - cp.load_bindings ((*x).path); + if (str == x->name) { + cp.load_bindings (x->path); + motorised_button.set_active (cp.motorised ()); + threshold_adjustment.set_value (cp.threshold ()); break; } } } } + +void +GMCPGUI::motorised_changed () +{ + cp.set_motorised (motorised_button.get_active ()); +} + +void +GMCPGUI::threshold_changed () +{ + cp.set_threshold (threshold_adjustment.get_value()); +}