summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_region_view.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-08-13 19:48:10 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-08-13 19:48:10 +0000
commite57c4d4c43c0d302c0b06128e0ba10c4683ee8fe (patch)
treebb464234572ba2efc655e8db6da0cb7c7e5b0c58 /gtk2_ardour/midi_region_view.cc
parent84fb6ae9bac56123b4ebcfcc8440a4262b29e6c0 (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.cc35
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 ();
}