Fix some strings incorrectly marked for translation.
[ardour.git] / gtk2_ardour / editor_selection.cc
index 01d3d3e4182e083b006c54f5cd43dee45de06dee..ca48cd6dd1ad7f1cdc42b26e410de3f5bfd7e623 100644 (file)
@@ -185,12 +185,12 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                return;
        }
 
-       if (!clicked_routeview) {
-               return;
+       RouteGroup* group = NULL;
+       if (clicked_routeview) {
+               group = clicked_routeview->route()->route_group();
        }
 
        bool had_tracks = !selection->tracks.empty();
-       RouteGroup* group = clicked_routeview->route()->route_group();
        RouteGroup& arg (_session->all_route_group());
 
        switch (op) {
@@ -202,8 +202,9 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                                }
                        } else if (group && group->is_active()) {
                                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
-                                       if ((*i)->route_group() == group)
+                                       if ((*i)->route_group() == group) {
                                                selection->remove(*i);
+                                       }
                                }
                        } else {
                                selection->remove (clicked_axisview);
@@ -215,8 +216,9 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                                }
                        } else if (group && group->is_active()) {
                                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
-                                       if ( (*i)->route_group() == group)
+                                       if ((*i)->route_group() == group) {
                                                selection->add(*i);
+                                       }
                                }
                        } else {
                                selection->add (clicked_axisview);
@@ -234,8 +236,9 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                        }
                } else if (group && group->is_active()) {
                        for (TrackViewList::iterator i  = track_views.begin(); i != track_views.end (); ++i) {
-                               if ((*i)->route_group() == group)
+                               if ((*i)->route_group() == group) {
                                        selection->add(*i);
+                               }
                        }
                } else {
                        selection->add (clicked_axisview);
@@ -253,8 +256,9 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
                        }
                } else if (group && group->is_active()) {
                        for (TrackViewList::iterator i  = track_views.begin(); i != track_views.end (); ++i) {
-                               if ((*i)->route_group() == group)
+                               if ((*i)->route_group() == group) {
                                        selection->add(*i);
+                               }
                        }
                } else {
                        selection->set (clicked_axisview);
@@ -270,6 +274,8 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
 void
 Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no_remove)
 {
+       begin_reversible_selection_op (X_("Set Selected Track"));
+
        switch (op) {
        case Selection::Toggle:
                if (selection->selected (&view)) {
@@ -295,6 +301,8 @@ Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no
                extend_selection_to_track (view);
                break;
        }
+
+       commit_reversible_selection_op ();
 }
 
 void
@@ -640,8 +648,14 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op)
                                selection->set (all_equivalent_regions);
                                commit = true;
                        } else {
-                               /* no commit necessary: clicked on an already selected region */
-                               goto out;
+                               /* clicked on an already selected region */
+                               if (press)
+                                       goto out;
+                               else {
+                                       get_equivalent_regions(clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id);
+                                       selection->set(all_equivalent_regions);
+                                       commit = true;
+                               }
                        }
                        break;
 
@@ -886,7 +900,7 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr<Region> regi
                return;
        }
 
-       begin_reversible_command (_("set selected regions"));
+       begin_reversible_selection_op (X_("set selected regions"));
 
        switch (op) {
        case Selection::Toggle:
@@ -904,7 +918,7 @@ Editor::set_selected_regionview_from_region_list (boost::shared_ptr<Region> regi
                break;
        }
 
-       commit_reversible_command () ;
+       commit_reversible_selection_op () ;
 }
 
 bool
@@ -929,11 +943,11 @@ Editor::set_selected_regionview_from_map_event (GdkEventAny* /*ev*/, StreamView*
                return true;
        }
 
-       begin_reversible_command (_("set selected regions"));
+       begin_reversible_selection_op (X_("set selected regions"));
 
        selection->set (rv);
 
-       commit_reversible_command () ;
+       commit_reversible_selection_op () ;
 
        return true;
 }
@@ -1013,10 +1027,6 @@ Editor::time_selection_changed ()
        } else {
                ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true);
        }
-
-       if (_session && Config->get_always_play_range() && !_session->transport_rolling() && !selection->time.empty()) {
-               _session->request_locate (selection->time.start());
-       }
 }
 
 /** Set all region actions to have a given sensitivity */
@@ -1179,6 +1189,8 @@ Editor::sensitize_the_right_region_actions ()
                editor_menu_actions->get_action("RegionMenuMIDI")->set_sensitive (false);
                _region_actions->get_action("show-region-list-editor")->set_sensitive (false);
                _region_actions->get_action("quantize-region")->set_sensitive (false);
+               _region_actions->get_action("legatize-region")->set_sensitive (false);
+               _region_actions->get_action("remove-overlap")->set_sensitive (false);
                _region_actions->get_action("fork-region")->set_sensitive (false);
                _region_actions->get_action("insert-patch-change-context")->set_sensitive (false);
                _region_actions->get_action("insert-patch-change")->set_sensitive (false);
@@ -1344,6 +1356,8 @@ Editor::select_all_in_track (Selection::Operation op)
                return;
        }
 
+       begin_reversible_selection_op (X_("Select All in Track"));
+
        clicked_routeview->get_selectables (0, max_framepos, 0, DBL_MAX, touched);
 
        switch (op) {
@@ -1360,57 +1374,41 @@ Editor::select_all_in_track (Selection::Operation op)
                selection->add (touched);
                break;
        }
+
+       commit_reversible_selection_op ();
 }
 
-void
+bool
 Editor::select_all_internal_edit (Selection::Operation)
 {
+       bool selected = false;
+
        for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
                MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
                if (mrv) {
                        mrv->select_all_notes ();
+                       selected = true;
                }
        }
+
+       MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(entered_regionview);
+       if (mrv) {
+               mrv->select_all_notes ();
+               selected = true;
+       }
+
+       return selected;
 }
 
 void
-Editor::select_all (Selection::Operation op)
+Editor::select_all_objects (Selection::Operation op)
 {
        list<Selectable *> touched;
 
-       TrackViewList ts;
-
-       if (selection->tracks.empty()) {
-               if (entered_track) {
-                       ts.push_back (entered_track);
-               } else {
-                       ts = track_views;
-               }
-       } else {
-               ts = selection->tracks;
-       }
-
-       if (_internal_editing) {
-
-               bool midi_selected = false;
-
-               for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
-                       if ((*iter)->hidden()) {
-                               continue;
-                       }
-                       
-                       RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*iter);
+       TrackViewList ts  = track_views;
 
-                       if (rtav && rtav->is_midi_track()) {
-                               midi_selected = true;
-                               break;
-                       }
-               }
-
-               if (midi_selected) {
-                       select_all_internal_edit (op);
-                       return;
-               }
+       if (internal_editing() && select_all_internal_edit(op)) {
+               return;  // Selected notes
        }
 
        for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
@@ -1418,9 +1416,11 @@ Editor::select_all (Selection::Operation op)
                        continue;
                }
                (*iter)->get_selectables (0, max_framepos, 0, DBL_MAX, touched);
+               selection->add (*iter);
        }
 
-       begin_reversible_command (_("select all"));
+
+       begin_reversible_selection_op (X_("select all"));
        switch (op) {
        case Selection::Add:
                selection->add (touched);
@@ -1435,7 +1435,7 @@ Editor::select_all (Selection::Operation op)
                /* meaningless, because we're selecting everything */
                break;
        }
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 }
 
 void
@@ -1447,8 +1447,10 @@ Editor::invert_selection_in_track ()
                return;
        }
 
+       begin_reversible_selection_op (X_("Invert Selection in Track"));
        clicked_routeview->get_inverted_selectables (*selection, touched);
        selection->set (touched);
+       commit_reversible_selection_op ();
 }
 
 void
@@ -1456,7 +1458,7 @@ Editor::invert_selection ()
 {
        list<Selectable *> touched;
 
-       if (_internal_editing) {
+       if (internal_editing()) {
                for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
                        MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
                        if (mrv) {
@@ -1473,7 +1475,9 @@ Editor::invert_selection ()
                (*iter)->get_inverted_selectables (*selection, touched);
        }
 
+       begin_reversible_selection_op (X_("Invert Selection"));
        selection->set (touched);
+       commit_reversible_selection_op ();
 }
 
 /** @param start Start time in session frames.
@@ -1514,7 +1518,7 @@ Editor::select_all_within (framepos_t start, framepos_t end, double top, double
                }
        }
 
-       begin_reversible_command (_("select all within"));
+       begin_reversible_selection_op (X_("select all within"));
        switch (op) {
        case Selection::Add:
                selection->add (found);
@@ -1530,7 +1534,7 @@ Editor::select_all_within (framepos_t start, framepos_t end, double top, double
                break;
        }
 
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 }
 
 void
@@ -1541,6 +1545,12 @@ Editor::set_selection_from_region ()
        }
 
        selection->set (selection->regions.start(), selection->regions.end_frame());
+       
+       //we must now select tracks, because otherwise set_selection_from_region would appear to do nothing
+       //perhaps too drastic; perhaps the user really only wants the region's track selected
+       //but I can't think of any use-case for that (why wouldn't you just select the region?)
+       select_all_tracks();    
+       
        if (!Profile->get_sae()) {
                set_mouse_mode (Editing::MouseRange, false);
        }
@@ -1572,9 +1582,9 @@ Editor::set_selection_from_loop()
 void
 Editor::set_selection_from_range (Location& loc)
 {
-       begin_reversible_command (_("set selection from range"));
+       begin_reversible_selection_op (X_("set selection from range"));
        selection->set (loc.start(), loc.end());
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 
        if (!Profile->get_sae()) {
                set_mouse_mode (Editing::MouseRange, false);
@@ -1612,9 +1622,9 @@ Editor::select_all_selectables_using_time_selection ()
                (*iter)->get_selectables (start, end - 1, 0, DBL_MAX, touched);
        }
 
-       begin_reversible_command (_("select all from range"));
+       begin_reversible_selection_op (X_("select all from range"));
        selection->set (touched);
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 }
 
 
@@ -1643,9 +1653,9 @@ Editor::select_all_selectables_using_punch()
                }
                (*iter)->get_selectables (location->start(), location->end() - 1, 0, DBL_MAX, touched);
        }
-       begin_reversible_command (_("select all from punch"));
+       begin_reversible_selection_op (X_("select all from punch"));
        selection->set (touched);
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 
 }
 
@@ -1674,9 +1684,9 @@ Editor::select_all_selectables_using_loop()
                }
                (*iter)->get_selectables (location->start(), location->end() - 1, 0, DBL_MAX, touched);
        }
-       begin_reversible_command (_("select all from loop"));
+       begin_reversible_selection_op (X_("select all from loop"));
        selection->set (touched);
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 
 }
 
@@ -1699,7 +1709,7 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
                }
        }
 
-       if (_internal_editing) {
+       if (internal_editing()) {
                for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
                        MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
                        if (mrv) {
@@ -1710,9 +1720,9 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
        }
 
        if (after) {
-               begin_reversible_command (_("select all after cursor"));
+               begin_reversible_selection_op (X_("select all after cursor"));
        } else {
-               begin_reversible_command (_("select all before cursor"));
+               begin_reversible_selection_op (X_("select all before cursor"));
        }
 
        TrackViewList* ts;
@@ -1730,7 +1740,7 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
                (*iter)->get_selectables (start, end, 0, DBL_MAX, touched);
        }
        selection->set (touched);
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 }
 
 void
@@ -1741,10 +1751,10 @@ Editor::select_all_selectables_using_edit (bool after)
        list<Selectable *> touched;
 
        if (after) {
-               start = get_preferred_edit_position();
+               start = get_preferred_edit_position(false, true);
                end = _session->current_end_frame();
        } else {
-               if ((end = get_preferred_edit_position()) > 1) {
+               if ((end = get_preferred_edit_position(false, true)) > 1) {
                        start = 0;
                        end -= 1;
                } else {
@@ -1752,7 +1762,7 @@ Editor::select_all_selectables_using_edit (bool after)
                }
        }
 
-       if (_internal_editing) {
+       if (internal_editing()) {
                for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
                        MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
                        mrv->select_range (start, end);
@@ -1761,9 +1771,9 @@ Editor::select_all_selectables_using_edit (bool after)
        }
 
        if (after) {
-               begin_reversible_command (_("select all after edit"));
+               begin_reversible_selection_op (X_("select all after edit"));
        } else {
-               begin_reversible_command (_("select all before edit"));
+               begin_reversible_selection_op (X_("select all before edit"));
        }
 
        TrackViewList* ts;
@@ -1781,11 +1791,11 @@ Editor::select_all_selectables_using_edit (bool after)
                (*iter)->get_selectables (start, end, 0, DBL_MAX, touched);
        }
        selection->set (touched);
-       commit_reversible_command ();
+       commit_reversible_selection_op ();
 }
 
 void
-Editor::select_all_selectables_between (bool /*within*/)
+Editor::select_all_selectables_between (bool within)
 {
        framepos_t start;
        framepos_t end;
@@ -1795,7 +1805,7 @@ Editor::select_all_selectables_between (bool /*within*/)
                return;
        }
 
-       if (_internal_editing) {
+       if (internal_editing()) {
                for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
                        MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
                        mrv->select_range (start, end);
@@ -1815,10 +1825,12 @@ Editor::select_all_selectables_between (bool /*within*/)
                if ((*iter)->hidden()) {
                        continue;
                }
-               (*iter)->get_selectables (start, end, 0, DBL_MAX, touched);
+               (*iter)->get_selectables (start, end, 0, DBL_MAX, touched, within);
        }
 
+       begin_reversible_selection_op (X_("Select all Selectables Between"));
        selection->set (touched);
+       commit_reversible_selection_op ();
 }
 
 void
@@ -1835,8 +1847,10 @@ Editor::select_range_between ()
                return;
        }
 
+       begin_reversible_selection_op (X_("Select Range Between"));
        set_mouse_mode (MouseRange);
        selection->set (start, end);
+       commit_reversible_selection_op ();
 }
 
 bool
@@ -1943,13 +1957,18 @@ Editor::get_edit_op_range (framepos_t& start, framepos_t& end) const
 void
 Editor::deselect_all ()
 {
+       begin_reversible_selection_op (X_("Deselect All"));
        selection->clear ();
+       commit_reversible_selection_op ();
 }
 
 long
 Editor::select_range (framepos_t s, framepos_t e)
 {
+       begin_reversible_selection_op (X_("Select Range"));
        selection->add (clicked_axisview);
        selection->time.clear ();
-       return selection->set (s, e);
+       long ret = selection->set (s, e);
+       commit_reversible_selection_op ();
+       return ret;
 }