Implement range selecting for MIDI notes (#4087).
git-svn-id: svn://localhost/ardour2/branches/3.0@10199 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
1567d362ad
commit
8be2e11c65
@ -1521,12 +1521,10 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
|
||||
list<Selectable *> touched;
|
||||
|
||||
if (after) {
|
||||
begin_reversible_command (_("select all after cursor"));
|
||||
start = cursor->current_frame;
|
||||
end = _session->current_end_frame();
|
||||
} else {
|
||||
if (cursor->current_frame > 0) {
|
||||
begin_reversible_command (_("select all before cursor"));
|
||||
start = 0;
|
||||
end = cursor->current_frame - 1;
|
||||
} else {
|
||||
@ -1534,6 +1532,21 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
|
||||
}
|
||||
}
|
||||
|
||||
if (_internal_editing) {
|
||||
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
|
||||
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
|
||||
if (mrv) {
|
||||
mrv->select_range (start, end);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (after) {
|
||||
begin_reversible_command (_("select all after cursor"));
|
||||
} else {
|
||||
begin_reversible_command (_("select all before cursor"));
|
||||
}
|
||||
|
||||
TrackViewList* ts;
|
||||
|
||||
@ -1561,12 +1574,10 @@ Editor::select_all_selectables_using_edit (bool after)
|
||||
list<Selectable *> touched;
|
||||
|
||||
if (after) {
|
||||
begin_reversible_command (_("select all after edit"));
|
||||
start = get_preferred_edit_position();
|
||||
end = _session->current_end_frame();
|
||||
} else {
|
||||
if ((end = get_preferred_edit_position()) > 1) {
|
||||
begin_reversible_command (_("select all before edit"));
|
||||
start = 0;
|
||||
end -= 1;
|
||||
} else {
|
||||
@ -1574,6 +1585,19 @@ Editor::select_all_selectables_using_edit (bool after)
|
||||
}
|
||||
}
|
||||
|
||||
if (_internal_editing) {
|
||||
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
|
||||
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
|
||||
mrv->select_range (start, end);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (after) {
|
||||
begin_reversible_command (_("select all after edit"));
|
||||
} else {
|
||||
begin_reversible_command (_("select all before edit"));
|
||||
}
|
||||
|
||||
TrackViewList* ts;
|
||||
|
||||
@ -1604,6 +1628,14 @@ Editor::select_all_selectables_between (bool /*within*/)
|
||||
return;
|
||||
}
|
||||
|
||||
if (_internal_editing) {
|
||||
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
|
||||
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
|
||||
mrv->select_range (start, end);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
TrackViewList* ts;
|
||||
|
||||
if (selection->tracks.empty()) {
|
||||
|
@ -2027,6 +2027,19 @@ MidiRegionView::select_all_notes ()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiRegionView::select_range (framepos_t start, framepos_t end)
|
||||
{
|
||||
clear_selection ();
|
||||
|
||||
for (Events::iterator i = _events.begin(); i != _events.end(); ++i) {
|
||||
framepos_t t = source_beats_to_absolute_frames((*i)->note()->time());
|
||||
if (t >= start && t <= end) {
|
||||
add_to_selection (*i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiRegionView::invert_selection ()
|
||||
{
|
||||
|
@ -192,6 +192,7 @@ public:
|
||||
void delete_note (boost::shared_ptr<NoteType>);
|
||||
size_t selection_size() { return _selection.size(); }
|
||||
void select_all_notes ();
|
||||
void select_range(framepos_t start, framepos_t end);
|
||||
void invert_selection ();
|
||||
|
||||
void move_selection(double dx, double dy, double cumulative_dy);
|
||||
|
Loading…
Reference in New Issue
Block a user