summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_time_axis.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-08-24 23:41:21 +0200
committerRobin Gareus <robin@gareus.org>2017-08-24 23:41:21 +0200
commit0e9dab6aabc2efddc957c7c71bc55354c16626ed (patch)
treef85f642b628e277f47d62cee5bf4728a4e3766a1 /gtk2_ardour/midi_time_axis.cc
parent18cf003aa9faf99cbc0cb1b2ec8596aef6cd68e0 (diff)
Allow to send immediate PC messages without closing the dialog.
Perhaps every change should trigger a PC (without "Apply") button?!
Diffstat (limited to 'gtk2_ardour/midi_time_axis.cc')
-rw-r--r--gtk2_ardour/midi_time_axis.cc39
1 files changed, 29 insertions, 10 deletions
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index ffff6a9698..33160f8da3 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -122,6 +122,7 @@ MidiTimeAxisView::MidiTimeAxisView (PublicEditor& ed, Session* sess, ArdourCanva
, controller_menu (0)
, poly_pressure_menu (0)
, _step_editor (0)
+ , _patch_change_dialog (0)
{
_midnam_model_selector.disable_scrolling();
_midnam_custom_device_mode_selector.disable_scrolling();
@@ -345,6 +346,9 @@ MidiTimeAxisView::~MidiTimeAxisView ()
delete controller_menu;
delete _step_editor;
+
+ delete _patch_change_dialog;
+ _patch_change_dialog = 0;
}
void
@@ -1078,19 +1082,14 @@ MidiTimeAxisView::build_color_mode_menu()
}
void
-MidiTimeAxisView::send_patch_change ()
+MidiTimeAxisView::immediate_patch_chnage_response (int response)
{
- if (!_route) {
- return;
- }
-
- Evoral::PatchChange<Evoral::Beats> empty (Evoral::Beats(), 0, 0, 0);
- PatchChangeDialog d (0, 0, empty, _route->instrument_info(), Gtk::Stock::OK);
-
- if (d.run() == RESPONSE_CANCEL) {
+ if (response != RESPONSE_ACCEPT || !_route) {
+ delete _patch_change_dialog;
+ _patch_change_dialog = 0;
return;
}
- Evoral::PatchChange<Evoral::Beats> p (d.patch ());
+ Evoral::PatchChange<Evoral::Beats> p (_patch_change_dialog->patch ());
uint8_t chn = p.channel();
@@ -1099,12 +1098,32 @@ MidiTimeAxisView::send_patch_change ()
boost::shared_ptr<AutomationControl> program = _route->automation_control(Evoral::Parameter (MidiPgmChangeAutomation, chn), true);
if (!bank_msb || ! bank_lsb || !program) {
+ _patch_change_dialog->show ();
return;
}
bank_msb->set_value (p.bank_msb (), Controllable::NoGroup);
bank_lsb->set_value (p.bank_lsb (), Controllable::NoGroup);
program->set_value (p.program () , Controllable::NoGroup);
+ _patch_change_dialog->show ();
+}
+
+void
+MidiTimeAxisView::send_patch_change ()
+{
+ if (!_route) {
+ return;
+ }
+ if (_patch_change_dialog) {
+ _patch_change_dialog->present ();
+ return;
+ }
+
+ Evoral::PatchChange<Evoral::Beats> empty (Evoral::Beats(), 0, 0, 0);
+ PatchChangeDialog* d = new PatchChangeDialog (0, 0, empty, _route->instrument_info(), Gtk::Stock::APPLY, false, false);
+ d->signal_response().connect (sigc::mem_fun (*this, &MidiTimeAxisView::immediate_patch_chnage_response));
+ _patch_change_dialog = d;
+ _patch_change_dialog->present ();
}
void