summaryrefslogtreecommitdiff
path: root/gtk2_ardour/automation_streamview.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-08-05 13:35:43 +0000
committerCarl Hetherington <carl@carlh.net>2010-08-05 13:35:43 +0000
commite7a2b99f3d4f7afe73a30ac85e770e228785c1be (patch)
tree3b959b78a8d34717e0190f4813225372a4bb3c22 /gtk2_ardour/automation_streamview.cc
parent355c079f1050fbf38327e92ac890d44f2d402031 (diff)
Clean up handling of track vs region automation a bit.
git-svn-id: svn://localhost/ardour2/branches/3.0@7544 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/automation_streamview.cc')
-rw-r--r--gtk2_ardour/automation_streamview.cc52
1 files changed, 33 insertions, 19 deletions
diff --git a/gtk2_ardour/automation_streamview.cc b/gtk2_ardour/automation_streamview.cc
index 1f07aaaba7..6beb439b11 100644
--- a/gtk2_ardour/automation_streamview.cc
+++ b/gtk2_ardour/automation_streamview.cc
@@ -158,10 +158,11 @@ AutomationStreamView::set_automation_state (AutoState state)
if (region_views.empty()) {
_pending_automation_state = state;
} else {
- for (std::list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- boost::shared_ptr<AutomationLine> line = dynamic_cast<AutomationRegionView*>(*i)->line();
- if (line && line->the_list()) {
- line->the_list()->set_automation_state (state);
+ list<boost::shared_ptr<AutomationLine> > lines = get_lines ();
+
+ for (list<boost::shared_ptr<AutomationLine> >::iterator i = lines.begin(); i != lines.end(); ++i) {
+ if ((*i)->the_list()) {
+ (*i)->the_list()->set_automation_state (state);
}
}
}
@@ -225,13 +226,12 @@ AutomationStreamView::automation_state () const
bool
AutomationStreamView::has_automation () const
{
- list<RegionView*>::const_iterator i = region_views.begin ();
- while (i != region_views.end()) {
- AutomationRegionView* rv = static_cast<AutomationRegionView*> (*i);
- if (rv->line() && rv->line()->npoints() > 0) {
+ list<boost::shared_ptr<AutomationLine> > lines = get_lines ();
+
+ for (list<boost::shared_ptr<AutomationLine> >::iterator i = lines.begin(); i != lines.end(); ++i) {
+ if ((*i)->npoints() > 0) {
return true;
}
- ++i;
}
return false;
@@ -243,10 +243,10 @@ AutomationStreamView::has_automation () const
void
AutomationStreamView::set_interpolation (AutomationList::InterpolationStyle s)
{
- for (list<RegionView*>::const_iterator i = region_views.begin(); i != region_views.end(); ++i) {
- AutomationRegionView* arv = dynamic_cast<AutomationRegionView*> (*i);
- assert (arv);
- arv->line()->the_list()->set_interpolation (s);
+ list<boost::shared_ptr<AutomationLine> > lines = get_lines ();
+
+ for (list<boost::shared_ptr<AutomationLine> >::iterator i = lines.begin(); i != lines.end(); ++i) {
+ (*i)->the_list()->set_interpolation (s);
}
}
@@ -267,10 +267,10 @@ AutomationStreamView::interpolation () const
void
AutomationStreamView::clear ()
{
- for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- AutomationRegionView* arv = dynamic_cast<AutomationRegionView*> (*i);
- assert (arv);
- arv->line()->clear ();
+ list<boost::shared_ptr<AutomationLine> > lines = get_lines ();
+
+ for (list<boost::shared_ptr<AutomationLine> >::iterator i = lines.begin(); i != lines.end(); ++i) {
+ (*i)->clear ();
}
}
@@ -287,9 +287,23 @@ AutomationStreamView::get_selectables (nframes_t start, nframes_t end, double bo
void
AutomationStreamView::set_selected_points (PointSelection& ps)
{
- for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+ list<boost::shared_ptr<AutomationLine> > lines = get_lines ();
+
+ for (list<boost::shared_ptr<AutomationLine> >::iterator i = lines.begin(); i != lines.end(); ++i) {
+ (*i)->set_selected_points (ps);
+ }
+}
+
+list<boost::shared_ptr<AutomationLine> >
+AutomationStreamView::get_lines () const
+{
+ list<boost::shared_ptr<AutomationLine> > lines;
+
+ for (list<RegionView*>::const_iterator i = region_views.begin(); i != region_views.end(); ++i) {
AutomationRegionView* arv = dynamic_cast<AutomationRegionView*> (*i);
assert (arv);
- arv->line()->set_selected_points (ps);
+ lines.push_back (arv->line());
}
+
+ return lines;
}