diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-19 03:03:28 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-05-19 03:03:28 +0000 |
commit | e258b2622a4386b405c2216d79b34887c3ed55bf (patch) | |
tree | c2abdacc5a31e9d572257050256c704b41fb46f5 /gtk2_ardour | |
parent | c25c7598c134af88bb85b5690aabc35472c77adf (diff) |
MIDI region forking, plus Playlist::regions_to_read() fix forward ported from 2.X. region forking requires a few cleanups
git-svn-id: svn://localhost/ardour2/branches/3.0@7118 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 41 | ||||
-rw-r--r-- | gtk2_ardour/midi_cut_buffer.cc | 2 |
4 files changed, 44 insertions, 1 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 9b71086cc6..e8c39faade 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -1792,6 +1792,7 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi } else if (mr) { items.push_back (MenuElem (_("Quantize"), sigc::mem_fun(*this, &Editor::quantize_region))); + items.push_back (MenuElem (_("Fork"), sigc::mem_fun(*this, &Editor::fork_region))); items.push_back (SeparatorElem()); } diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index e60ae99c9a..48798543a9 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1075,6 +1075,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void reset_region_scale_amplitude (); void adjust_region_scale_amplitude (bool up); void quantize_region (); + void fork_region (); void do_insert_time (); void insert_time (nframes64_t, nframes64_t, Editing::InsertTimeOption, bool, bool, bool); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 54ee1288c2..9628928004 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4649,6 +4649,47 @@ Editor::apply_midi_note_edit_op (MidiOperator& op) } void +Editor::fork_region () +{ + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { + return; + } + + begin_reversible_command (_("Fork Region(s)")); + + track_canvas->get_window()->set_cursor (*wait_cursor); + gdk_flush (); + + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) { + RegionSelection::iterator tmp = r; + ++tmp; + + MidiRegionView* const mrv = dynamic_cast<MidiRegionView*>(*r); + + if (mrv) { + boost::shared_ptr<Playlist> playlist = mrv->region()->playlist(); + boost::shared_ptr<MidiRegion> newregion = mrv->midi_region()->clone (); + + playlist->clear_history (); + cerr << "Replace region with " << newregion->name() << endl; + playlist->replace_region (mrv->region(), newregion, mrv->region()->position()); + _session->add_command(new StatefulDiffCommand (playlist)); + } + + r = tmp; + } + + commit_reversible_command (); + rs.clear (); + + track_canvas->get_window()->set_cursor (*current_canvas_cursor); +} + +void Editor::quantize_region () { if (!_session) { diff --git a/gtk2_ardour/midi_cut_buffer.cc b/gtk2_ardour/midi_cut_buffer.cc index 9c1c84ede4..1bc6ab212a 100644 --- a/gtk2_ardour/midi_cut_buffer.cc +++ b/gtk2_ardour/midi_cut_buffer.cc @@ -21,7 +21,7 @@ using namespace ARDOUR; MidiCutBuffer::MidiCutBuffer (Session* s) - : AutomatableSequence<MidiModel::TimeType> (*s, 0) + : AutomatableSequence<MidiModel::TimeType> (*s) , _origin (0) { |