X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fautomation_streamview.cc;h=d3419e8bb84ade63922457cc344169c5258780e5;hb=e11b3f90c2d02735a071d526d67cfd0de90cbac3;hp=d068c51e5ee85ab51978de829f28d480686c94ec;hpb=eb4a1fdbb8fec1f8aa5dfe33f882064e85792a84;p=ardour.git diff --git a/gtk2_ardour/automation_streamview.cc b/gtk2_ardour/automation_streamview.cc index d068c51e5e..d3419e8bb8 100644 --- a/gtk2_ardour/automation_streamview.cc +++ b/gtk2_ardour/automation_streamview.cc @@ -70,7 +70,7 @@ AutomationStreamView::~AutomationStreamView () RegionView* -AutomationStreamView::add_region_view_internal (boost::shared_ptr region, bool wfd) +AutomationStreamView::add_region_view_internal (boost::shared_ptr region, bool wfd, bool recording) { if ( ! region) { cerr << "No region" << endl; @@ -83,11 +83,15 @@ AutomationStreamView::add_region_view_internal (boost::shared_ptr region mr->midi_source()->load_model(); } - const boost::shared_ptr control = region->control(_controller->controllable()->parameter()); + const boost::shared_ptr control + = boost::dynamic_pointer_cast( + region->control(_controller->controllable()->parameter())); boost::shared_ptr list; - if (control) - list = control->list(); + if (control) { + list = boost::dynamic_pointer_cast(control->list()); + assert(!control->list() || list); + } AutomationRegionView *region_view; std::list::iterator i; @@ -95,17 +99,21 @@ AutomationStreamView::add_region_view_internal (boost::shared_ptr region for (i = region_views.begin(); i != region_views.end(); ++i) { if ((*i)->region() == region) { - /* great. we already have a MidiRegionView for this Region. use it again. */ + /* great. we already have an AutomationRegionView for this Region. use it again. */ + AutomationRegionView* arv = dynamic_cast(*i);; + if (arv->line()) + arv->line()->set_list (list); (*i)->set_valid (true); (*i)->enable_display(wfd); - display_region(dynamic_cast(*i)); + display_region(arv); return NULL; } } - region_view = new AutomationRegionView (canvas_group, _automation_view, region, list, + region_view = new AutomationRegionView (canvas_group, _automation_view, region, + _controller->controllable()->parameter(), list, _samples_per_unit, region_color); region_view->init (region_color, false); @@ -134,6 +142,17 @@ AutomationStreamView::display_region(AutomationRegionView* region_view) region_view->line().reset(); } +void +AutomationStreamView::set_automation_state (AutoState state) +{ + std::list::iterator i; + for (i = region_views.begin(); i != region_views.end(); ++i) { + boost::shared_ptr line = ((AutomationRegionView*)(*i))->line(); + if (line && line->the_list()) + line->the_list()->set_automation_state (state); + } +} + void AutomationStreamView::redisplay_diskstream () { @@ -155,7 +174,7 @@ AutomationStreamView::redisplay_diskstream () region_views.erase (i); } else { (*i)->enable_display(true); - (*i)->set_y_position_and_height(0, height); + (*i)->set_height(height); } i = tmp;