diff options
-rw-r--r-- | gtk2_ardour/editor_mixer.cc | 35 | ||||
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.cc | 33 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.h | 3 |
4 files changed, 36 insertions, 41 deletions
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index 6d2a882091..d6fa49a132 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -30,6 +30,7 @@ #include "ardour_ui.h" #include "selection.h" #include "audio_time_axis.h" +#include "automation_time_axis.h" #include "actions.h" #include "i18n.h" @@ -162,13 +163,11 @@ Editor::create_editor_mixer () void Editor::set_selected_mixer_strip (TimeAxisView& view) { - AudioTimeAxisView* at; bool show = false; bool created; - if (!session || (at = dynamic_cast<AudioTimeAxisView*>(&view)) == 0) { + if (!session) return; - } Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); if (act) { @@ -186,9 +185,21 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) created = false; } - /* might be nothing to do */ + //if this is an automation track then we should show the parent + boost::shared_ptr<ARDOUR::Route> route; + AutomationTimeAxisView *auto_tav; + if ( (auto_tav = dynamic_cast<AutomationTimeAxisView*>(&view)) == 0 ) { + AudioTimeAxisView* at = dynamic_cast<AudioTimeAxisView*>(&view); + if (at != NULL) + route = at->route(); + } else { + AudioTimeAxisView *parent = dynamic_cast<AudioTimeAxisView*>( view.get_parent() ); + if (parent != NULL) { + route = parent->route(); + } + } - if (current_mixer_strip->route() == at->route()) { + if (current_mixer_strip->route() == route) { return; } @@ -196,7 +207,7 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) show = true; } - current_mixer_strip->set_route (at->route()); + current_mixer_strip->set_route (route); if (created) { current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this); @@ -315,18 +326,6 @@ Editor::current_mixer_strip_removed () void Editor::current_mixer_strip_hidden () { - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { - - AudioTimeAxisView* tmp; - - if ((tmp = dynamic_cast<AudioTimeAxisView*>(*i)) != 0) { - if (tmp->route() == current_mixer_strip->route()) { - (*i)->set_selected (false); - break; - } - } - } - Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); if (act) { Glib::RefPtr<Gtk::ToggleAction> tact = Glib::RefPtr<Gtk::ToggleAction>::cast_dynamic(act); diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index baaca99850..40f98b11e9 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -829,11 +829,7 @@ Editor::track_selection_changed () } for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { - if (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end()) { - (*i)->set_selected (true); - } else { - (*i)->set_selected (false); - } + (*i)->set_selected ( *selection ); } ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty()); diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index c0b6a697ad..14a30bab47 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -588,20 +588,32 @@ TimeAxisView::popup_size_menu (guint32 when) } void -TimeAxisView::set_selected (bool yn) +TimeAxisView::set_selected (Selection &selection) { - if (yn == _selected) { + //give children a chance to be selected + for (vector<TimeAxisView*>::iterator i = children.begin(); i != children.end(); ++i) { + (*i)->set_selected (selection); + } + + //determine if I am in the selection + bool selected = false; + if (find (selection.tracks.begin(), selection.tracks.end(), this) != selection.tracks.end()) { + selected = true; + } + + //bail out here if my state is unchanged + if (selected == _selected) { return; } - Selectable::set_selected (yn); + Selectable::set_selected (selected); if (_selected) { controls_ebox.set_name (controls_base_selected_name); controls_frame.set_name (controls_base_selected_name); controls_vbox.set_name (controls_base_selected_name); - /* propagate any existing selection, if the mode is right */ + /* propagate any existing selection, if the mode is right */ if (editor.current_mouse_mode() == Editing::MouseRange && !editor.get_selection().time.empty()) { show_selection (editor.get_selection().time); } @@ -611,15 +623,6 @@ TimeAxisView::set_selected (bool yn) controls_frame.set_name (controls_base_unselected_name); controls_vbox.set_name (controls_base_unselected_name); hide_selection (); - - /* children will be set for the yn=true case. but when deselecting - the editor only has a list of top-level trackviews, so we - have to do this here. - */ - - for (vector<TimeAxisView*>::iterator i = children.begin(); i != children.end(); ++i) { - (*i)->set_selected (false); - } } resizer.queue_draw (); @@ -693,10 +696,6 @@ TimeAxisView::show_selection (TimeSelection& ts) double y2; SelectionRect *rect; - for (vector<TimeAxisView*>::iterator i = children.begin(); i != children.end(); ++i) { - (*i)->show_selection (ts); - } - if (canvas_item_visible (selection_group)) { while (!used_selection_rects.empty()) { free_selection_rects.push_front (used_selection_rects.front()); diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index b624bda73a..86721a55e2 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -155,7 +155,7 @@ class TimeAxisView : public virtual AxisView, public Stateful virtual void hide (); bool hidden() const { return _hidden; } - virtual void set_selected (bool); + virtual void set_selected (Selection&); /** * potential handler for entered events @@ -225,6 +225,7 @@ class TimeAxisView : public virtual AxisView, public Stateful /* state/serialization management */ void set_parent (TimeAxisView& p); + TimeAxisView *get_parent () {return parent;} bool has_state () const; /* call this on the parent */ |