+ break;
+ case PhaseAutomation:
+ control = r->phase_control ();
+ break;
+ default:
+ break;
+ }
+
+ if (control) {
+ float val = control->get_value();
+
+ /* Note: all of the displayed controllables require the display
+ * of their *actual* ("internal") value, not the version mapped
+ * into the normalized 0..1.0 ("interface") range.
+ */
+
+ do_parameter_display (type, val);
+ /* update pot/encoder */
+ _surface->write (_vpot->set (control->internal_to_interface (val), true, Pot::wrap));
+ }
+}
+
+void
+Strip::notify_eq_change (AutomationType type, uint32_t band, bool force_update)
+{
+ boost::shared_ptr<Stripable> r = _surface->mcp().subview_stripable();
+
+ if (!r) {
+ /* not in subview mode */
+ return;
+ }
+
+ if (_surface->mcp().subview_mode() != MackieControlProtocol::EQ) {
+ /* no longer in EQ subview mode */
+ return;
+ }
+
+ boost::shared_ptr<AutomationControl> control;
+
+ switch (type) {
+ case EQGain:
+ control = r->eq_gain_controllable (band);
+ break;
+ case EQFrequency:
+ control = r->eq_freq_controllable (band);
+ break;
+ case EQQ:
+ control = r->eq_q_controllable (band);
+ break;
+ case EQShape:
+ control = r->eq_shape_controllable (band);
+ break;
+ case EQHPF:
+ control = r->eq_hpf_controllable ();
+ break;
+ case EQEnable:
+ control = r->eq_enable_controllable ();
+ break;
+ default:
+ break;
+ }
+
+ if (control) {
+ float val = control->get_value();
+ do_parameter_display (type, val);
+ /* update pot/encoder */
+ _surface->write (_vpot->set (control->internal_to_interface (val), true, Pot::wrap));
+ }
+}
+
+void
+Strip::notify_dyn_change (AutomationType type, bool force_update, bool propagate_mode)
+{
+ boost::shared_ptr<Stripable> r = _surface->mcp().subview_stripable();
+
+ if (!r) {
+ /* not in subview mode */
+ return;
+ }
+
+ if (_surface->mcp().subview_mode() != MackieControlProtocol::Dynamics) {
+ /* no longer in EQ subview mode */
+ return;
+ }
+
+ boost::shared_ptr<AutomationControl> control;
+ bool reset_all = false;
+
+ switch (type) {
+ case CompThreshold:
+ control = r->comp_threshold_controllable ();
+ break;
+ case CompSpeed:
+ control = r->comp_speed_controllable ();
+ break;
+ case CompMode:
+ control = r->comp_mode_controllable ();
+ reset_all = true;
+ break;
+ case CompMakeup:
+ control = r->comp_makeup_controllable ();
+ break;
+ case CompRedux:
+ control = r->comp_redux_controllable ();
+ break;
+ case CompEnable:
+ control = r->comp_enable_controllable ();
+ break;
+ default:
+ break;
+ }
+
+ if (propagate_mode && reset_all) {
+ _surface->subview_mode_changed ();
+ }
+
+ if (control) {
+ float val = control->get_value();
+ do_parameter_display (type, val);
+ /* update pot/encoder */
+ _surface->write (_vpot->set (control->internal_to_interface (val), true, Pot::wrap));