summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_selection.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-11-15 17:20:38 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-11-15 17:20:38 +0000
commitadbb47fae78324837b146258ae065c64a8403f40 (patch)
tree17e196144cce10b890853b912d2fe2fe8a447914 /gtk2_ardour/editor_selection.cc
parenta0f00d7d227e1fe3cc935d6e7570e0f6a0ec2f18 (diff)
change semantics for select-all operation: if no track is selected, use the current entered track, or if there is no entered track, use all tracks; if in internal edit mode, check first to see if any MIDI tracks are among those to be operated on, and only do the internal edit version of select-all if there are
git-svn-id: svn://localhost/ardour2/branches/3.0@13508 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_selection.cc')
-rw-r--r--gtk2_ardour/editor_selection.cc37
1 files changed, 34 insertions, 3 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index 7b08eaeaa6..ffce8af25f 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -1354,17 +1354,48 @@ Editor::select_all (Selection::Operation op)
{
list<Selectable *> touched;
+ TrackViewList ts;
+
+ if (selection->tracks.empty()) {
+ if (entered_track) {
+ ts.push_back (entered_track);
+ } else {
+ ts = track_views;
+ }
+ } else {
+ ts = selection->tracks;
+ }
+
if (_internal_editing) {
- select_all_internal_edit (op);
- return;
+
+ bool midi_selected = false;
+
+ for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
+ if ((*iter)->hidden()) {
+ continue;
+ }
+
+ RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*iter);
+
+ if (rtav && rtav->is_midi_track()) {
+ midi_selected = true;
+ break;
+ }
+ }
+
+ if (midi_selected) {
+ select_all_internal_edit (op);
+ return;
+ }
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+ for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
(*iter)->get_selectables (0, max_framepos, 0, DBL_MAX, touched);
}
+
begin_reversible_command (_("select all"));
switch (op) {
case Selection::Add: