summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/mackie_control_protocol.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaces/mackie/mackie_control_protocol.cc')
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc56
1 files changed, 45 insertions, 11 deletions
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index bdfe2b6b71..98285a87e6 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -1619,17 +1619,34 @@ MackieControlProtocol::clear_ports ()
}
void
+MackieControlProtocol::notify_subview_route_deleted ()
+{
+ /* return to global/mixer view */
+ _subview_route.reset ();
+ set_view_mode (Mixer);
+}
+
+void
MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route> r)
{
- SubViewMode old = _subview_mode;
+ SubViewMode old_mode = _subview_mode;
+ boost::shared_ptr<Route> old_route = _subview_route;
_subview_mode = sm;
if (r) {
- _subview_route = r;
+ /* retain _subview_route even if it is reset to null implicitly */
+ _subview_route = r;
}
- if (_subview_mode != old) {
+ if ((_subview_mode != old_mode) || (_subview_route != old_route)) {
+
+ if (r != old_route) {
+ subview_route_connections.drop_connections ();
+ if (_subview_route) {
+ _subview_route->DropReferences.connect (subview_route_connections, MISSING_INVALIDATOR, boost::bind (&MackieControlProtocol::notify_subview_route_deleted, this), this);
+ }
+ }
/* subview mode did actually change */
@@ -1642,18 +1659,35 @@ MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route
}
for (Surfaces::iterator s = copy.begin(); s != copy.end(); ++s) {
- (*s)->subview_mode_changed ();
+ (*s)->subview_mode_changed ();
}
}
- /* turn buttons related to vpot mode on or off as required */
+ if (_subview_mode != old_mode) {
- if (_subview_mode != None) {
- update_global_button (Button::Trim, off);
- update_global_button (Button::Send, off);
- update_global_button (Button::Pan, off);
- } else {
- pot_mode_globals ();
+ /* turn buttons related to vpot mode on or off as required */
+
+ switch (_subview_mode) {
+ case MackieControlProtocol::None:
+ pot_mode_globals ();
+ break;
+ case MackieControlProtocol::EQ:
+ update_global_button (Button::Eq, on);
+ update_global_button (Button::Dyn, off);
+ update_global_button (Button::AudioInstruments, off); /* faking up Dyn */
+ update_global_button (Button::Trim, off);
+ update_global_button (Button::Send, off);
+ update_global_button (Button::Pan, off);
+ break;
+ case MackieControlProtocol::Dynamics:
+ update_global_button (Button::Eq, off);
+ update_global_button (Button::Dyn, on);
+ update_global_button (Button::AudioInstruments, on); /* faking up Dyn */
+ update_global_button (Button::Trim, off);
+ update_global_button (Button::Send, off);
+ update_global_button (Button::Pan, off);
+ break;
+ }
}
}
}