#include <ardour/midi_source.h>
#include <ardour/midi_diskstream.h>
#include <ardour/midi_track.h>
-#include <ardour/midi_events.h>
#include <ardour/smf_source.h>
#include <ardour/region_factory.h>
RegionView*
-AutomationStreamView::add_region_view_internal (boost::shared_ptr<Region> region, bool wfd)
+AutomationStreamView::add_region_view_internal (boost::shared_ptr<Region> region, bool wfd, bool recording)
{
if ( ! region) {
cerr << "No region" << endl;
mr->midi_source()->load_model();
}
- const boost::shared_ptr<AutomationControl> control = region->control(_controller->controllable()->parameter());
+ const boost::shared_ptr<AutomationControl> control
+ = boost::dynamic_pointer_cast<AutomationControl>(
+ region->control(_controller->controllable()->parameter()));
- if ( ! control) {
- cerr << "No " << _controller->controllable()->parameter().to_string()
- << " for " << region->name() << endl;
- return NULL;
+ boost::shared_ptr<AutomationList> list;
+ if (control) {
+ list = boost::dynamic_pointer_cast<AutomationList>(control->list());
+ assert(!control->list() || list);
}
- const boost::shared_ptr<AutomationList> list = control->list();
-
AutomationRegionView *region_view;
std::list<RegionView *>::iterator i;
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<AutomationRegionView*>(*i);;
+ if (arv->line())
+ arv->line()->set_list (list);
(*i)->set_valid (true);
(*i)->enable_display(wfd);
- display_region(dynamic_cast<AutomationRegionView*>(*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);
region_view->line().reset();
}
+void
+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())
+ line->the_list()->set_automation_state (state);
+ }
+}
+
void
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;