Handle automation modes better with region-based (MIDI) automation. Should fix ...
authorCarl Hetherington <carl@carlh.net>
Sat, 22 May 2010 01:33:13 +0000 (01:33 +0000)
committerCarl Hetherington <carl@carlh.net>
Sat, 22 May 2010 01:33:13 +0000 (01:33 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7138 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/automation_streamview.cc
gtk2_ardour/automation_streamview.h
gtk2_ardour/automation_time_axis.cc

index e861522fd784d229ef0daf548bd0209eb07c9b28..4177e729fe139750cdc8f65f94ef0d70931287e8 100644 (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 ();
+}
index 37f13774a4d4a8841ea1421977fb33307b0cf20f..9a406294387b771c26fe7f2e6857903a3bb13ad7 100644 (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 ();
 
index d2b43d33f925aa1fc8c2e87727ffc367a66e95d6..35af325357e6cd7d8f134fb50613729aec6c7675 100644 (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)) {