return;
}
+ PBD::Unwinder<bool> uw (_editor_track_selection_change_without_scroll, true);
+
RouteGroup* group = NULL;
if (clicked_routeview) {
group = clicked_routeview->route()->route_group();
RouteGroup* group = route_basis->route()->route_group();
- if (group && group->enabled_property(prop) && group->enabled_property (Properties::active.property_id) ) {
+ if (group && group->enabled_property(prop) && group->enabled_property (Properties::active.property_id)) {
/* the basis is a member of an active route group, with the appropriate
properties; find other members */
RouteGroup* group = route_basis->route()->route_group(); // could be null, not a problem
- if (group && group->enabled_property(prop) && group->enabled_property (Properties::active.property_id) ) {
+ if (group && group->enabled_property(prop) && group->enabled_property (Properties::active.property_id)) {
/* the basis is a member of an active route group, with the appropriate
properties; find other members */
return true;
}
-struct SelectionOrderSorter {
- bool operator() (TimeAxisView const * const a, TimeAxisView const * const b) const {
- boost::shared_ptr<Stripable> sa = a->stripable ();
- boost::shared_ptr<Stripable> sb = b->stripable ();
- if (!sa && !sb) {
- return a < b;
- }
- if (!sa) {
- return false;
- }
- if (!sb) {
- return true;
- }
- return sa->presentation_info().selection_cnt() < sb->presentation_info().selection_cnt();
- }
-};
-
void
Editor::presentation_info_changed (PropertyChange const & what_changed)
{
break;
default:
set_selected_mixer_strip (*(selection->tracks.back()));
- if (!_track_selection_change_without_scroll) {
+ if (!_track_selection_change_without_scroll && !_editor_track_selection_change_without_scroll) {
ensure_time_axis_view_is_visible (*(selection->tracks.back()), false);
}
break;
}
}
+void
+Editor::track_selection_changed ()
+{
+ /* reset paste count, so the plaste location doesn't get incremented
+ * if we want to paste in the same place, but different track. */
+ paste_count = 0;
+
+ if ( _session->solo_selection_active() )
+ play_solo_selection(false);
+}
+
void
Editor::time_selection_changed ()
{
}
}
+ if (_session->solo_selection_active()) {
+ play_solo_selection(false);
+ }
+
+ /* set nudge button color */
+ if (! get_regions_from_selection_and_entered().empty()) {
+ /* nudge regions */
+ nudge_forward_button.set_name ("nudge button");
+ nudge_backward_button.set_name ("nudge button");
+ } else {
+ /* nudge marker or playhead */
+ nudge_forward_button.set_name ("generic button");
+ nudge_backward_button.set_name ("generic button");
+ }
}
void
void
Editor::invert_selection ()
{
- list<Selectable *> touched;
if (internal_editing()) {
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
return;
}
- for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
- if ((*iter)->hidden()) {
- continue;
+ if (!selection->tracks.empty()) {
+
+ TrackViewList inverted;
+
+ for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+ if (!(*iter)->selected()) {
+ inverted.push_back (*iter);
+ }
}
- (*iter)->get_inverted_selectables (*selection, touched);
- }
- begin_reversible_selection_op (X_("Invert Selection"));
- selection->set (touched);
- commit_reversible_selection_op ();
+ begin_reversible_selection_op (X_("Invert Track Selection"));
+ selection->set (inverted);
+ commit_reversible_selection_op ();
+
+ } else {
+
+ list<Selectable *> touched;
+
+ for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
+ if ((*iter)->hidden()) {
+ continue;
+ }
+ (*iter)->get_inverted_selectables (*selection, touched);
+ }
+
+ begin_reversible_selection_op (X_("Invert ObjectSelection"));
+ selection->set (touched);
+ commit_reversible_selection_op ();
+ }
}
/** @param start Start time in session samples.
selection->set (tvl);
- if (!get_smart_mode () || !mouse_mode == Editing::MouseObject) {
+ if (!get_smart_mode () || !(mouse_mode == Editing::MouseObject) ) {
set_mouse_mode (Editing::MouseRange, false);
}
}
Editor::set_selection_from_range (Location& loc)
{
begin_reversible_selection_op (X_("set selection from range"));
+
selection->set (loc.start(), loc.end());
+
+ // if no tracks are selected, enable all tracks
+ // (_something_ has to be selected for any range selection, otherwise the user won't see anything)
+ if (selection->tracks.empty()) {
+ select_all_tracks();
+ }
+
commit_reversible_selection_op ();
if (!get_smart_mode () || mouse_mode != Editing::MouseObject) {
samplepos_t start;
samplepos_t end;
- if ( !selection->time.empty() ) {
+ if (!selection->time.empty()) {
selection->clear_time ();
}
/* if an explicit range exists, use it */
- if ( (mouse_mode == MouseRange || get_smart_mode() ) && !selection->time.empty()) {
+ if ((mouse_mode == MouseRange || get_smart_mode()) && !selection->time.empty()) {
/* we know that these are ordered */
start = selection->time.start();
end = selection->time.end_sample();