fader+meter: update numeric display bg on style change
[ardour.git] / gtk2_ardour / editor_drag.cc
index caa807de3d4e66d87acfde47a32b668783d80d17..eb130c5f294fedd86175379f13103e4bb6c603b8 100644 (file)
@@ -4239,9 +4239,16 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
                        }
                }
                
+               //if user is selecting a range on an automation track, bail out here before we get to the grouped stuff, 
+               // because the grouped stuff will start working on tracks (routeTAVs), and end up removing this 
+               AutomationTimeAxisView *atest = dynamic_cast<AutomationTimeAxisView *>(_editor->clicked_axisview);
+               if (atest) {
+                       _editor->selection->add (atest);
+                       break; 
+               }
+               
                /* select all tracks within the rectangle that we've marked out so far */
-               TrackViewList to_be_added_to_selection;
-               TrackViewList to_be_removed_from_selection;
+               TrackViewList new_selection;
                TrackViewList& all_tracks (_editor->track_views);
 
                ArdourCanvas::Coord const top = grab_y();
@@ -4249,27 +4256,28 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
 
                if (top >= 0 && bottom >= 0) {
 
+                       //first, find the tracks that are covered in the y range selection
                        for (TrackViewList::const_iterator i = all_tracks.begin(); i != all_tracks.end(); ++i) {
-                       
                                if ((*i)->covered_by_y_range (top, bottom)) {
-                                       to_be_added_to_selection.push_back (*i);
+                                       new_selection.push_back (*i);
                                }
                        }
 
-                       //add any tracks that are GROUPED with the tracks we selected
-                       TrackViewList grouped_add = to_be_added_to_selection;
-                       for (TrackViewList::const_iterator i = to_be_added_to_selection.begin(); i != to_be_added_to_selection.end(); ++i) {
-                               RouteTimeAxisView *add = dynamic_cast<RouteTimeAxisView *>(*i);
-                               if ( add && add->route()->route_group() && add->route()->route_group()->is_active() ) {
+                       //now find any tracks that are GROUPED with the tracks we selected
+                       TrackViewList grouped_add = new_selection;
+                       for (TrackViewList::const_iterator i = new_selection.begin(); i != new_selection.end(); ++i) {
+                               RouteTimeAxisView *n = dynamic_cast<RouteTimeAxisView *>(*i);
+                               if ( n && n->route()->route_group() && n->route()->route_group()->is_active() && n->route()->route_group()->enabled_property (ARDOUR::Properties::select.property_id) ) {
                                        for (TrackViewList::const_iterator j = all_tracks.begin(); j != all_tracks.end(); ++j) {
-                                               RouteTimeAxisView *rem = dynamic_cast<RouteTimeAxisView *>(*j);
-                                               if ( rem && (add != rem) && (rem->route()->route_group() == add->route()->route_group()) )
+                                               RouteTimeAxisView *check = dynamic_cast<RouteTimeAxisView *>(*j);
+                                               if ( check && (n != check) && (check->route()->route_group() == n->route()->route_group()) )
                                                        grouped_add.push_back (*j);
                                        }
                                }
                        }
 
-                       //now compare our list with the current selection, and add or remove as necessary  ( most mouse moves don't change the selection so we can't just SET it for every mouse move; it gets clunky )
+                       //now compare our list with the current selection, and add or remove as necessary
+                       //( NOTE: most mouse moves don't change the selection so we can't just SET it for every mouse move; it gets clunky )
                        TrackViewList tracks_to_add;
                        TrackViewList tracks_to_remove;
                        for (TrackViewList::const_iterator i = grouped_add.begin(); i != grouped_add.end(); ++i)
@@ -4278,10 +4286,8 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
                        for (TrackViewList::const_iterator i = _editor->selection->tracks.begin(); i != _editor->selection->tracks.end(); ++i)
                                if ( !grouped_add.contains ( *i ) )
                                        tracks_to_remove.push_back ( *i );
-                                       
                        _editor->selection->add(tracks_to_add);
                        _editor->selection->remove(tracks_to_remove);
-                       
 
                }
        }
@@ -4993,8 +4999,8 @@ AutomationRangeDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
                                double const p = j->line->time_converter().from (i->start - j->line->time_converter().origin_b ());
                                double const q = j->line->time_converter().from (a - j->line->time_converter().origin_b ());
 
-                               the_list->add (p, the_list->eval (p));
-                               the_list->add (q, the_list->eval (q));
+                               the_list->editor_add (p, the_list->eval (p));
+                               the_list->editor_add (q, the_list->eval (q));
                        }
 
                        /* same thing for the end */
@@ -5019,8 +5025,8 @@ AutomationRangeDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
                                double const p = j->line->time_converter().from (b - j->line->time_converter().origin_b ());
                                double const q = j->line->time_converter().from (i->end - j->line->time_converter().origin_b ());
 
-                               the_list->add (p, the_list->eval (p));
-                               the_list->add (q, the_list->eval (q));
+                               the_list->editor_add (p, the_list->eval (p));
+                               the_list->editor_add (q, the_list->eval (q));
                        }
                }