changes to deal with region/note selection when changing into/out of internal edit mode

Also, activate MIDI editing actions so that they are effective in internal edit mode
This commit is contained in:
Paul Davis 2020-04-16 12:16:45 -06:00
parent 921e3e75b5
commit 65f7a6a938
9 changed files with 123 additions and 13 deletions

View file

@ -4437,17 +4437,21 @@ void
Editor::cut_copy_midi (CutCopyOp op)
{
Temporal::Beats earliest = std::numeric_limits<Temporal::Beats>::max();
for (MidiRegionSelection::iterator i = selection->midi_regions.begin(); i != selection->midi_regions.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
if (mrv) {
if (!mrv->selection().empty()) {
earliest = std::min(earliest, (*mrv->selection().begin())->note()->time());
}
mrv->cut_copy_clear (op);
/* XXX: not ideal, as there may be more than one track involved in the selection */
_last_cut_copy_source_track = &mrv->get_time_axis_view();
MidiRegionSelection ms = selection->midi_regions ();
cerr << "CCM, mrv = " << ms.size() << endl;
for (MidiRegionSelection::iterator i = ms.begin(); i != ms.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*i);
if (!mrv->selection().empty()) {
earliest = std::min(earliest, (*mrv->selection().begin())->note()->time());
}
mrv->cut_copy_clear (op);
/* XXX: not ideal, as there may be more than one track involved in the selection */
_last_cut_copy_source_track = &mrv->get_time_axis_view();
}
if (!selection->points.empty()) {
@ -8562,3 +8566,22 @@ Editor::toggle_layer_display ()
}
}
void
Editor::midi_action (void (MidiRegionView::*method)())
{
MidiRegionSelection ms = selection->midi_regions();
cerr << "MIDI action with " << ms.size() << " midi regions\n";
for (MidiRegionSelection::iterator i = ms.begin(); i != ms.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*i);
if (!mrv) {
continue;
}
(mrv->*method) ();
}
}