Remove unnecessary height changed notification for streamviews, now that the summary...
[ardour.git] / gtk2_ardour / automation_time_axis.cc
index d40f5e3405c7ca90ea92ee6891b709c8b7fdb8e2..9163b10dc1bea5e952d791c03069b596dbc91767 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)) {
@@ -357,6 +364,10 @@ AutomationTimeAxisView::interpolation_changed ()
        if (_line) {
                _line->set_interpolation(style);
        }
+
+       if (_view) {
+               _view->set_interpolation (style);
+       }
 }
 
 void
@@ -366,25 +377,26 @@ AutomationTimeAxisView::set_interpolation (AutomationList::InterpolationStyle st
        if (_line) {
                _line->set_interpolation(style);
        }
+       if (_view) {
+               _view->set_interpolation (style);
+       }
 }
 
 void
 AutomationTimeAxisView::clear_clicked ()
 {
-       _session->begin_reversible_command (_("clear automation"));
        if (_line) {
+               _session->begin_reversible_command (_("clear automation"));
                _line->clear ();
        }
-       _session->commit_reversible_command ();
 }
 
 void
 AutomationTimeAxisView::set_height (uint32_t h)
 {
-       bool changed = (height != (uint32_t) h) || first_call_to_set_height;
-       bool changed_between_small_and_normal = (
-                  (height < hNormal && h >= hNormal)
-               || (height >= hNormal || h < hNormal) );
+       bool const changed = (height != (uint32_t) h) || first_call_to_set_height;
+       uint32_t const normal = preset_height (HeightNormal);
+       bool const changed_between_small_and_normal = ( (height < normal && h >= normal) || (height >= normal || h < normal) );
 
        TimeAxisView* state_parent = get_parent_with_state ();
        assert(state_parent);
@@ -411,7 +423,7 @@ AutomationTimeAxisView::set_height (uint32_t h)
 
                first_call_to_set_height = false;
 
-               if (h >= hNormal) {
+               if (h >= preset_height (HeightNormal)) {
                        controls_table.remove (name_hbox);
 
                        if (plugname) {
@@ -432,7 +444,7 @@ AutomationTimeAxisView::set_height (uint32_t h)
                        auto_button.show();
                        hide_button.show_all();
 
-               } else if (h >= hSmall) {
+               } else if (h >= preset_height (HeightSmall)) {
                        controls_table.remove (name_hbox);
                        if (plugname) {
                                if (plugname_packed) {
@@ -449,7 +461,7 @@ AutomationTimeAxisView::set_height (uint32_t h)
                        auto_button.hide();
                        hide_button.hide();
                }
-       } else if (h >= hNormal){
+       } else if (h >= preset_height (HeightNormal)) {
                cerr << "track grown, but neither changed_between_small_and_normal nor first_call_to_set_height set!" << endl;
        }
 
@@ -935,3 +947,10 @@ AutomationTimeAxisView::set_visibility (bool yn)
 
        return changed;
 }
+
+/** @return true if this view has any automation data to display */
+bool
+AutomationTimeAxisView::has_automation () const
+{
+       return ( (_line && _line->npoints() > 0) || (_view && _view->has_automation()) );
+}