Handle automation modes better with region-based (MIDI) automation. Should fix #3135.

git-svn-id: svn://localhost/ardour2/branches/3.0@7138 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2010-05-22 01:33:13 +00:00
parent 8d048aa472
commit f33b1d1900
3 changed files with 29 additions and 4 deletions

View File

@ -146,8 +146,9 @@ AutomationStreamView::set_automation_state (AutoState state)
std::list<RegionView *>::iterator i;
for (i = region_views.begin(); i != region_views.end(); ++i) {
boost::shared_ptr<AutomationLine> line = ((AutomationRegionView*)(*i))->line();
if (line && line->the_list())
if (line && line->the_list()) {
line->the_list()->set_automation_state (state);
}
}
}
@ -191,3 +192,19 @@ AutomationStreamView::color_handler ()
}*/
}
AutoState
AutomationStreamView::automation_state () const
{
/* XXX: bit of a hack: just return the state of our first RegionView */
if (region_views.empty()) {
return Off;
}
boost::shared_ptr<AutomationLine> line = ((AutomationRegionView*) region_views.front())->line ();
if (!line || !line->the_list()) {
return Off;
}
return line->the_list()->automation_state ();
}

View File

@ -46,6 +46,7 @@ class AutomationStreamView : public StreamView
~AutomationStreamView ();
void set_automation_state (ARDOUR::AutoState state);
ARDOUR::AutoState automation_state () const;
void redisplay_track ();

View File

@ -272,6 +272,11 @@ AutomationTimeAxisView::set_automation_state (AutoState state)
if (_view) {
_view->set_automation_state (state);
/* AutomationStreamViews don't signal when their automation state changes, so handle
our updates `manually'.
*/
automation_state_changed ();
}
}
@ -282,10 +287,12 @@ AutomationTimeAxisView::automation_state_changed ()
/* update button label */
if (!_line) {
state = Off;
} else {
if (_line) {
state = _control->alist()->automation_state ();
} else if (_view) {
state = _view->automation_state ();
} else {
state = Off;
}
switch (state & (Off|Play|Touch|Write)) {