change automation track selection model slightly so that auto tracks are highlighted as expected. only show range boxes when the automation will actually get edited. clicking an automation track should show the editor-mixer for the parent track

git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6997 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Ben Loftis 2010-04-26 21:47:58 +00:00
parent ed4970a203
commit 507f22c7cd
4 changed files with 36 additions and 41 deletions

View File

@ -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);

View File

@ -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());

View File

@ -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());

View File

@ -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 */