summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_selection.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_selection.cc')
-rw-r--r--gtk2_ardour/editor_selection.cc93
1 files changed, 85 insertions, 8 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index 5fcdb8ef32..87b9eba6f7 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -808,7 +808,7 @@ void
Editor::select_all (Selection::Operation op)
{
list<Selectable *> touched;
-
+
for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
if ((*iter)->hidden()) {
continue;
@@ -991,7 +991,15 @@ Editor::select_all_selectables_using_time_selection ()
return;
}
- for (TrackViewList::iterator iter = selection->tracks.begin(); iter != selection->tracks.end(); ++iter) {
+ TrackSelection* ts;
+
+ if (selection->tracks.empty()) {
+ ts = &track_views;
+ } else {
+ ts = &selection->tracks;
+ }
+
+ for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@@ -1014,7 +1022,16 @@ Editor::select_all_selectables_using_punch()
return;
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+ TrackSelection* ts;
+
+ if (selection->tracks.empty()) {
+ ts = &track_views;
+ } else {
+ ts = &selection->tracks;
+ }
+
+ for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@@ -1036,7 +1053,16 @@ Editor::select_all_selectables_using_loop()
return;
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+ TrackSelection* ts;
+
+ if (selection->tracks.empty()) {
+ ts = &track_views;
+ } else {
+ ts = &selection->tracks;
+ }
+
+ for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@@ -1069,7 +1095,16 @@ Editor::select_all_selectables_using_cursor (Cursor *cursor, bool after)
}
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+ TrackSelection* ts;
+
+ if (selection->tracks.empty()) {
+ ts = &track_views;
+ } else {
+ ts = &selection->tracks;
+ }
+
+ for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@@ -1100,7 +1135,16 @@ Editor::select_all_selectables_using_edit (bool after)
}
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+ TrackSelection* ts;
+
+ if (selection->tracks.empty()) {
+ ts = &track_views;
+ } else {
+ ts = &selection->tracks;
+ }
+
+ for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@@ -1120,8 +1164,16 @@ Editor::select_all_selectables_between (bool within)
if (!get_edit_op_range (start, end)) {
return;
}
-
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+
+ TrackSelection* ts;
+
+ if (selection->tracks.empty()) {
+ ts = &track_views;
+ } else {
+ ts = &selection->tracks;
+ }
+
+ for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
if ((*iter)->hidden()) {
continue;
}
@@ -1241,3 +1293,28 @@ Editor::deselect_all ()
{
selection->clear ();
}
+
+Editor::ExclusiveRegionSelection::ExclusiveRegionSelection (Editor& ed, RegionView* rv)
+ : editor (ed),
+ regionview (rv)
+{
+
+ if (!rv || ed.current_mouse_mode() != Editing::MouseObject) {
+ return;
+ }
+
+ if (ed.get_selection().regions.empty() && !ed.get_selection().selected (rv)) {
+ ed.get_selection().set (rv, false);
+ remove = true;
+ } else {
+ remove = false;
+ }
+}
+
+Editor::ExclusiveRegionSelection::~ExclusiveRegionSelection ()
+{
+ if (remove) {
+ editor.get_selection().remove (regionview);
+ }
+}
+