diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-11-15 17:20:38 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-11-15 17:20:38 +0000 |
commit | adbb47fae78324837b146258ae065c64a8403f40 (patch) | |
tree | 17e196144cce10b890853b912d2fe2fe8a447914 /gtk2_ardour/editor_selection.cc | |
parent | a0f00d7d227e1fe3cc935d6e7570e0f6a0ec2f18 (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.cc | 37 |
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: |