summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_region_view.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-12-20 03:42:59 +0000
committerCarl Hetherington <carl@carlh.net>2010-12-20 03:42:59 +0000
commit570ed69d2a791486a907b62ee2336a3953a7a1c0 (patch)
treeca759d0dfc198a81fbd4bb544febffe7b2039138 /gtk2_ardour/midi_region_view.cc
parented0deee74775ff2b7830f7461c90fc6423b8520e (diff)
Allow dragging of program change flags in MIDI regions.
git-svn-id: svn://localhost/ardour2/branches/3.0@8303 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_region_view.cc')
-rw-r--r--gtk2_ardour/midi_region_view.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index a27d437274..e2298c42ad 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -1669,6 +1669,31 @@ MidiRegionView::alter_program_change(PCEvent& old_program, const MIDI::Name::Pat
}
void
+MidiRegionView::move_program_change (PCEvent pc, double t)
+{
+ boost::shared_ptr<Evoral::Control> control = _model->control (Evoral::Parameter (MidiPgmChangeAutomation, pc.channel, 0));
+ assert (control);
+
+ /* XXX: seems that these events should have IDs, or that this code should
+ at least be in ControlList.
+ */
+
+ boost::shared_ptr<Evoral::ControlList> list = control->list ();
+ Evoral::ControlList::iterator i = list->begin ();
+ while (i != list->end() && ((*i)->when != pc.time || (*i)->value != pc.value)) {
+ ++i;
+ }
+
+ assert (i != list->end ());
+
+ list->erase (i);
+ list->add (t, pc.value);
+
+ _pgm_changes.clear ();
+ display_program_changes ();
+}
+
+void
MidiRegionView::program_selected(CanvasProgramChange& program, const MIDI::Name::PatchPrimaryKey& new_patch)
{
PCEvent program_change_event(program.event_time(), program.program(), program.channel());