[Summary] When range sellection covers multiple regions all of them will be processed by range drag

This commit is contained in:
GZharun 2014-10-01 17:56:06 +03:00
parent a1d4529776
commit 048d03ecd8
5 changed files with 84 additions and 136 deletions

View file

@ -1434,8 +1434,10 @@ RouteTimeAxisView::fade_range (TimeSelection& selection)
}
void
RouteTimeAxisView::cut_range (ARDOUR::AudioRange& range)
RouteTimeAxisView::cut_copy_range (Selection& selection, bool copy, Selection& new_items)
{
new_items.clear();
boost::shared_ptr<Playlist> what_we_got;
boost::shared_ptr<Track> tr = track ();
boost::shared_ptr<Playlist> playlist;
@ -1447,28 +1449,32 @@ RouteTimeAxisView::cut_range (ARDOUR::AudioRange& range)
playlist = tr->playlist();
float const speed = tr->speed();
if (speed != 1.0f) {
range.start = session_frame_to_track_frame(range.start, speed);
range.end = session_frame_to_track_frame(range.end, speed);
}
TimeSelection time (selection.time);
float const speed = tr->speed();
if (speed != 1.0f) {
for (TimeSelection::iterator i = time.begin(); i != time.end(); ++i) {
(*i).start = session_frame_to_track_frame((*i).start, speed);
(*i).end = session_frame_to_track_frame((*i).end, speed);
}
}
playlist->clear_changes ();
playlist->clear_owned_changes ();
std::list<AudioRange> audio_ranges;
audio_ranges.push_back(range);
if ((what_we_got = playlist->cut (audio_ranges)) != 0) {
_editor.get_cut_buffer().set (what_we_got);
if (Config->get_edit_mode() == Ripple)
playlist->ripple(range.start, -range.length(), NULL);
// no need to exclude any regions from rippling here
if (copy) {
vector<Command*> cmds;
playlist->rdiff (cmds);
_session->add_commands (cmds);
if ((what_we_got = playlist->copy (time)) != 0) {
new_items.set (what_we_got);
}
} else {
if ((what_we_got = playlist->cut (time)) != 0) {
new_items.set (what_we_got);
if (Config->get_edit_mode() == Ripple)
playlist->ripple(time.start(), -time.length(), NULL);
}
_session->add_command (new StatefulDiffCommand (playlist));
}
}