summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_selection.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-08-26 23:25:44 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-08-26 23:25:44 +0000
commit1526735d7925bf07f7a6c3378a87bf559e11050a (patch)
treee95c8086296e3b45b2b91579a8e588dc609ec0c9 /gtk2_ardour/editor_selection.cc
parentbdb84342381310f6162418e0603e7eeaabde20bd (diff)
some (unfinished) work on incorporating Ben's rev 6919 changes regarding track selection; make newly selected tracks show the current range selection; fix crashes related to meter display; remove "all" group from main group tab display and just put it down in its own button (totally incomplete); minor cleanups
git-svn-id: svn://localhost/ardour2/branches/3.0@7696 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_selection.cc')
-rw-r--r--gtk2_ardour/editor_selection.cc85
1 files changed, 83 insertions, 2 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index e99b31c478..bde72e5374 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -174,12 +174,83 @@ Editor::select_all_tracks ()
* tracks, in which case nothing will happen unless `force' is true.
*/
void
-Editor::set_selected_track_as_side_effect (bool force)
+Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force)
{
+ cerr << "E::sstase ca = " << clicked_axisview << " cr = " << clicked_routeview
+ << " op = " << op << " force = " << force
+ << endl;
+
if (!clicked_axisview) {
return;
}
+#if 1
+ if (!clicked_routeview) {
+ return;
+ }
+
+ RouteGroup* group = clicked_routeview->route()->route_group();
+
+ switch (op) {
+ case Selection::Toggle:
+ if (selection->selected (clicked_axisview)) {
+ if (_session->all_route_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)->route_group() == group)
+ selection->remove(*i);
+ }
+ } else {
+ selection->remove (clicked_axisview);
+ }
+ } else {
+ if (_session->all_route_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)->route_group() == group)
+ selection->add(*i);
+ }
+ } else {
+ selection->add (clicked_axisview);
+ }
+ }
+ 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 (_session->all_route_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)->route_group() == group)
+ selection->add(*i);
+ }
+ } else {
+ selection->set (clicked_axisview);
+ }
+ break;
+
+ case Selection::Extend:
+ selection->clear();
+ cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
+ break;
+ }
+
+#else // the older version
+
if (!selection->tracks.empty()) {
if (!selection->selected (clicked_axisview)) {
selection->add (clicked_axisview);
@@ -188,6 +259,7 @@ Editor::set_selected_track_as_side_effect (bool force)
} else if (force) {
selection->set (clicked_axisview);
}
+#endif
}
void
@@ -797,12 +869,21 @@ Editor::track_selection_changed ()
}
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- (*i)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
+
+ bool yn = (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
+
+ (*i)->set_selected (yn);
TimeAxisView::Children c = (*i)->get_child_list ();
for (TimeAxisView::Children::iterator j = c.begin(); j != c.end(); ++j) {
(*j)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), j->get()) != selection->tracks.end());
}
+
+ if (yn) {
+ (*i)->reshow_selection (selection->time);
+ } else {
+ (*i)->hide_selection ();
+ }
}
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());