summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_selection.cc
diff options
context:
space:
mode:
authorBen Loftis <ben@glw.com>2010-04-16 22:07:43 +0000
committerBen Loftis <ben@glw.com>2010-04-16 22:07:43 +0000
commit05550ae584db4e309e08628970a38d623329233d (patch)
treeb1f987dbb87b8aac511684a1b4ea38ba7e69d74d /gtk2_ardour/editor_selection.cc
parentc9188f7f76788b73cea7673dcfbbb66728f90e0b (diff)
rationalize track selection and range selection
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6919 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_selection.cc')
-rw-r--r--gtk2_ardour/editor_selection.cc86
1 files changed, 77 insertions, 9 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index b82d296429..baaca99850 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -170,20 +170,81 @@ Editor::select_all_tracks ()
}
void
-Editor::set_selected_track_as_side_effect (bool force)
+Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force)
{
if (!clicked_trackview) {
return;
}
- if (!selection->tracks.empty()) {
+ if (force) {
+ selection->set (clicked_trackview);
+ return;
+ }
+
+ AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(clicked_trackview);
+ if (!atv) {
+ return;
+ }
+ RouteGroup* group = atv->route()->edit_group();
- if (!selection->selected (clicked_trackview)) {
- selection->add (clicked_trackview);
+ switch (op) {
+ case Selection::Toggle: {
+ if (selection->selected (clicked_trackview)) {
+ if (all_group_is_active) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ selection->remove(*i);
+ }
+ } else if (group && group->is_active()) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ if ( (*i)->edit_group() == group)
+ selection->remove(*i);
+ }
+ } else
+ selection->remove (clicked_trackview);
+ } else {
+ if (all_group_is_active) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ selection->add(*i);
+ }
+ } else if (group && group->is_active())
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ if ( (*i)->edit_group() == group)
+ selection->add(*i);
+ }
+ else
+ selection->add (clicked_trackview);
}
-
- } else if (force) {
- selection->set (clicked_trackview);
+ }
+ break;
+
+ case Selection::Add: {
+ selection->clear();
+ cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
+ }
+ break;
+
+ case Selection::Set:{
+ selection->clear();
+ if (all_group_is_active) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ selection->add(*i);
+ }
+ } else if (group && group->is_active())
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ if ( (*i)->edit_group() == group)
+ selection->add(*i);
+ }
+ else
+ selection->set (clicked_trackview);
+ }
+ break;
+
+ case Selection::Extend: {
+ selection->clear();
+ cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
+ }
+ break;
+
}
}
@@ -276,7 +337,14 @@ Editor::get_relevant_audio_tracks (set<AudioTimeAxisView*>& relevant_tracks)
RouteGroup* group = atv->route()->edit_group();
- if (group && group->is_active()) {
+ if ( all_group_is_active ) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ AudioTimeAxisView* tatv;
+ if ((tatv = dynamic_cast<AudioTimeAxisView*> (*i)) != 0) {
+ relevant_tracks.insert (tatv);
+ }
+ }
+ } else if (group && group->is_active()) {
/* active group for this track, loop over all tracks and get every member of the group */
@@ -322,7 +390,7 @@ Editor::mapover_audio_tracks (slot<void,AudioTimeAxisView&,uint32_t> sl, TimeAxi
tracks.insert (audio_basis);
RouteGroup* group = audio_basis->route()->edit_group();
- if (group && group->is_active()) {
+ if ( all_group_is_active || (group && group->is_active()) ) {
/* the basis is a member of an active edit group; find other members */
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {