X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.cc;h=4edf3a5693f5c36e6da277691542cc0c92e1f940;hb=d53d0faf931314ec180f4236db2dffda21e69071;hp=4ce3ac55b81af67407a42e6807c060bf1fa5b5cf;hpb=906f7e1edd412c35fe16939f3599c76aa0735a89;p=ardour.git diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 4ce3ac55b8..4edf3a5693 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -139,7 +139,7 @@ #include "vca_time_axis.h" #include "verbose_cursor.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -805,6 +805,12 @@ Editor::Editor () ControlProtocol::VerticalZoomInSelected.connect (*this, invalidator (*this), boost::bind (&Editor::control_vertical_zoom_in_selected, this), gui_context()); ControlProtocol::VerticalZoomOutSelected.connect (*this, invalidator (*this), boost::bind (&Editor::control_vertical_zoom_out_selected, this), gui_context()); + ControlProtocol::AddStripableToSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Add), gui_context()); + ControlProtocol::RemoveStripableFromSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Toggle), gui_context()); + ControlProtocol::SetStripableSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Set), gui_context()); + ControlProtocol::ToggleStripableSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_select, this, _1, Selection::Toggle), gui_context()); + ControlProtocol::ClearStripableSelection.connect (*this, invalidator (*this), boost::bind (&Editor::control_unselect, this), gui_context()); + BasicUI::AccessAction.connect (*this, invalidator (*this), boost::bind (&Editor::access_action, this, _1, _2), gui_context()); /* handle escape */ @@ -1006,6 +1012,30 @@ Editor::control_unselect () selection->clear_tracks (); } +void +Editor::control_select (boost::shared_ptr s, Selection::Operation op) +{ + TimeAxisView* tav = axis_view_from_stripable (s); + + if (tav) { + switch (op) { + case Selection::Add: + selection->add (tav); + break; + case Selection::Toggle: + selection->toggle (tav); + break; + case Selection::Extend: + break; + case Selection::Set: + selection->set (tav); + break; + } + } else { + selection->clear_tracks (); + } +} + void Editor::control_step_tracks_up () { @@ -4383,7 +4413,7 @@ Editor::current_visual_state (bool with_tracks) vs->zoom_focus = zoom_focus; if (with_tracks) { - *vs->gui_state = *ARDOUR_UI::instance()->gui_object_state; + vs->gui_state->set_state (ARDOUR_UI::instance()->gui_object_state->get_state()); } return vs; @@ -4448,7 +4478,7 @@ Editor::use_visual_state (VisualState& vs) reposition_and_zoom (vs.leftmost_frame, vs.samples_per_pixel); if (vs.gui_state) { - *ARDOUR_UI::instance()->gui_object_state = *vs.gui_state; + ARDOUR_UI::instance()->gui_object_state->set_state (vs.gui_state->get_state()); for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (*i)->clear_property_cache(); @@ -5155,16 +5185,13 @@ Editor::region_view_removed () _summary->set_background_dirty (); } -RouteTimeAxisView* -Editor::axis_view_from_route (boost::shared_ptr r) const +TimeAxisView* +Editor::axis_view_from_stripable (boost::shared_ptr s) const { - TrackViewList::const_iterator j = track_views.begin (); - while (j != track_views.end()) { - RouteTimeAxisView* rtv = dynamic_cast (*j); - if (rtv && rtv->route() == r) { - return rtv; + for (TrackViewList::const_iterator j = track_views.begin (); j != track_views.end(); ++j) { + if ((*j)->stripable() == s) { + return *j; } - ++j; } return 0; @@ -5177,7 +5204,7 @@ Editor::axis_views_from_routes (boost::shared_ptr r) const TrackViewList t; for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) { - TimeAxisView* tv = axis_view_from_route (*i); + TimeAxisView* tv = axis_view_from_stripable (*i); if (tv) { t.push_back (tv); }