X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_region_view.cc;h=215f7c34da5fd6d769eea5d0b7b509b0eeb67053;hb=e57c4d4c43c0d302c0b06128e0ba10c4683ee8fe;hp=990d53aa32fea970aa6f2975f0c7e1d30248839c;hpb=84fb6ae9bac56123b4ebcfcc8440a4262b29e6c0;p=ardour.git diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 990d53aa32..215f7c34da 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -1674,7 +1674,6 @@ MidiRegionView::cut_copy_clear (Editing::CutCopyOp op) switch (op) { case Cut: case Copy: - cerr << "Cut/Copy: get selection as CB\n"; editor.get_cut_buffer().add (selection_as_cut_buffer()); break; default: @@ -1718,21 +1717,39 @@ MidiRegionView::selection_as_cut_buffer () const } void -MidiRegionView::paste (nframes64_t pos, const MidiCutBuffer& mcb) +MidiRegionView::paste (nframes64_t pos, float times, const MidiCutBuffer& mcb) { - MidiModel::DeltaCommand* cmd = _model->new_delta_command("paste"); + if (mcb.empty()) { + return; + } + + start_delta_command (_("paste")); + MidiModel::TimeType beat_delta; MidiModel::TimeType paste_pos_beats; + MidiModel::TimeType duration; + duration = mcb.notes().back()->end_time() - mcb.notes().front()->time(); paste_pos_beats = frames_to_beats (pos); beat_delta = mcb.notes().front()->time() - paste_pos_beats; + paste_pos_beats = 0; - for (Evoral::Sequence::Notes::const_iterator i = mcb.notes().begin(); i != mcb.notes().end(); ++i) { + _selection.clear (); - boost::shared_ptr copied_note (new NoteType (*((*i).get()))); - copied_note->set_time (copied_note->time() - beat_delta); - cmd->add (copied_note); - } + for (int n = 0; n < (int) times; ++n) { - _model->apply_command(trackview.session(), cmd); + for (Evoral::Sequence::Notes::const_iterator i = mcb.notes().begin(); i != mcb.notes().end(); ++i) { + + boost::shared_ptr copied_note (new NoteType (*((*i).get()))); + copied_note->set_time (paste_pos_beats + copied_note->time() - beat_delta); + + /* make all newly added notes selected */ + + command_add_note (copied_note, true); + } + + paste_pos_beats += duration; + } + + apply_command (); }