diff options
author | Carl Hetherington <carl@carlh.net> | 2010-12-20 03:42:59 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-12-20 03:42:59 +0000 |
commit | 570ed69d2a791486a907b62ee2336a3953a7a1c0 (patch) | |
tree | ca759d0dfc198a81fbd4bb544febffe7b2039138 /gtk2_ardour/midi_region_view.cc | |
parent | ed0deee74775ff2b7830f7461c90fc6423b8520e (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.cc | 25 |
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()); |