push2: provide basic GUI control for pressure mode
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 26 Aug 2016 01:05:23 +0000 (21:05 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 27 Sep 2016 19:59:31 +0000 (14:59 -0500)
libs/surfaces/push2/gui.cc
libs/surfaces/push2/gui.h
libs/surfaces/push2/push2.cc

index dba7bb909a35ddba9a7eee496d4ddb56e62c388d..54bf723288bd98b3c7e33b3134f780b9a8fa9d63 100644 (file)
@@ -90,6 +90,7 @@ P2GUI::P2GUI (Push2& p)
        , mode_label (_("Mode (Scale)"))
        , inkey_button (_("In-Key Mode"))
        , mode_packer (3, 3)
+       , pressure_mode_label (_("Pressure Mode"))
 {
        set_border_width (12);
 
@@ -131,6 +132,10 @@ P2GUI::P2GUI (Push2& p)
        table.attach (output_combo, 1, 2, row, row+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 0);
        row++;
 
+       table.attach (pressure_mode_label, 0, 1, row, row+1, AttachOptions (0), AttachOptions (0));
+       table.attach (pressure_mode_selector, 1, 2, row, row+1, AttachOptions (FILL|EXPAND), AttachOptions (0));
+       row++;
+
        hpacker.pack_start (table, true, true);
 
        pad_table.set_spacings (3);
@@ -163,6 +168,11 @@ P2GUI::P2GUI (Push2& p)
        pad_notebook.append_page (mode_packer, _("Modes/Scales"));
        pad_notebook.append_page (custom_packer, _("Custom"));
 
+       pressure_mode_selector.set_model (build_pressure_mode_columns());
+       pressure_mode_selector.pack_start (pressure_mode_columns.name);
+       pressure_mode_selector.set_active ((int) p2.pressure_mode());
+       pressure_mode_selector.signal_changed().connect (sigc::mem_fun (*this, &P2GUI::reprogram_pressure_mode));
+
        root_note_octave_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &P2GUI::reprogram_pad_scale));
        root_note_selector.signal_changed().connect (sigc::mem_fun (*this, &P2GUI::reprogram_pad_scale));
        mode_selector.signal_changed().connect (sigc::mem_fun (*this, &P2GUI::reprogram_pad_scale));
@@ -464,6 +474,23 @@ P2GUI::build_pad_table ()
        }
 }
 
+Glib::RefPtr<Gtk::ListStore>
+P2GUI::build_pressure_mode_columns ()
+{
+       Glib::RefPtr<Gtk::ListStore> store = ListStore::create (pressure_mode_columns);
+       TreeModel::Row row;
+
+       row = *store->append();
+       row[pressure_mode_columns.name] = _("AfterTouch (Channel Pressure)");
+       row[pressure_mode_columns.mode] = Push2::AfterTouch;
+
+       row = *store->append();
+       row[pressure_mode_columns.name] = _("Polyphonic Pressure (Note Pressure)");
+       row[pressure_mode_columns.mode] = Push2::PolyPressure;
+
+       return store;
+}
+
 Glib::RefPtr<Gtk::ListStore>
 P2GUI::build_mode_columns ()
 {
@@ -720,3 +747,24 @@ P2GUI::reprogram_pad_scale ()
 
        p2.set_pad_scale (root, octave, mode, inkey);
 }
+
+void
+P2GUI::reprogram_pressure_mode ()
+{
+       Gtk::TreeModel::iterator iter = pressure_mode_selector.get_active();
+       Push2::PressureMode pm;
+
+       if (iter) {
+               Gtk::TreeModel::Row row = *iter;
+               if (row) {
+                       pm = row[pressure_mode_columns.mode];
+               } else {
+                       pm = Push2::AfterTouch;
+               }
+       } else {
+               pm = Push2::AfterTouch;
+       }
+
+       cerr << "Reprogram pm to " << pm << endl;
+       p2.set_pressure_mode (pm);
+}
index b472698feecec1571645be74c35499c34c3536fe..8d8829c26035c5aeb207e3df9c0d18e196471cda 100644 (file)
@@ -143,7 +143,21 @@ private:
        Gtk::Table    mode_packer;
        Gtk::VBox     custom_packer;
 
+       struct PressureModeColumns : public Gtk::TreeModel::ColumnRecord {
+               PressureModeColumns() {
+                       add (mode);
+                       add (name);
+               }
+               Gtk::TreeModelColumn<Push2::PressureMode>  mode;
+               Gtk::TreeModelColumn<std::string> name;
+       };
+       PressureModeColumns pressure_mode_columns;
+       Glib::RefPtr<Gtk::ListStore> build_pressure_mode_columns ();
+       Gtk::ComboBox pressure_mode_selector;
+       Gtk::Label pressure_mode_label;
+
        void reprogram_pad_scale ();
+       void reprogram_pressure_mode ();
 };
 
 }
index d91cf5cfe811929e55e974c4180390d2ae77ae00..caa3f1e1026250eeb0066e4f1e3d7f36294393f9 100644 (file)
@@ -1304,7 +1304,7 @@ Push2::pad_filter (MidiBuffer& in, MidiBuffer& out) const
 
                                matched = true;
                        }
-               } else if ((*ev).is_pitch_bender() || (*ev).is_aftertouch() || (*ev).is_channel_pressure()) {
+               } else if ((*ev).is_pitch_bender() || (*ev).is_poly_pressure() || (*ev).is_channel_pressure()) {
                        out.push_back (*ev);
                }
        }
@@ -1780,4 +1780,5 @@ Push2::set_pressure_mode (PressureMode pm)
        }
 
        write (msg);
+       cerr << "Sent PM message " << msg << endl;
 }