diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-08-13 19:48:10 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-08-13 19:48:10 +0000 |
commit | e57c4d4c43c0d302c0b06128e0ba10c4683ee8fe (patch) | |
tree | bb464234572ba2efc655e8db6da0cb7c7e5b0c58 /gtk2_ardour/midi_region_view.cc | |
parent | 84fb6ae9bac56123b4ebcfcc8440a4262b29e6c0 (diff) |
more MIDI paste improvements, plus move region-mute binding to PRIMARY-m and use "m" for toggle-internal-editing
git-svn-id: svn://localhost/ardour2/branches/3.0@5525 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_region_view.cc')
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 35 |
1 files changed, 26 insertions, 9 deletions
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<MidiModel::TimeType>::Notes::const_iterator i = mcb.notes().begin(); i != mcb.notes().end(); ++i) { + _selection.clear (); - boost::shared_ptr<NoteType> 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<MidiModel::TimeType>::Notes::const_iterator i = mcb.notes().begin(); i != mcb.notes().end(); ++i) { + + boost::shared_ptr<NoteType> 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 (); } |