mackie: cleanup subview mode a little
[ardour.git] / libs / surfaces / mackie / mackie_control_protocol.cc
index c6263ef9bf7b78583d09dc32686204ed14fb37c7..d3318519751b29f77955daf4379e9e6bb120a648 100644 (file)
@@ -1622,10 +1622,33 @@ MackieControlProtocol::clear_ports ()
 }
 
 void
-MackieControlProtocol::set_subview_mode (SubViewMode sm)
+MackieControlProtocol::set_subview_mode (SubViewMode sm, boost::shared_ptr<Route> r)
 {
        _subview_mode = sm;
-       display_view_mode ();
+       _subview_route = r;
+
+       if (_subview_mode == None) {
+               assert (!_subview_route);
+       }
+
+       {
+               Glib::Threads::Mutex::Lock lm (surfaces_lock);
+
+               for (Surfaces::iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
+                       (*s)->subview_mode_changed ();
+               }
+       }
+
+       /* turn buttons related to vpot mode on or off as required */
+
+       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 ();
+       }
+
 }
 
 void
@@ -1649,15 +1672,6 @@ MackieControlProtocol::display_view_mode ()
                        (*s)->update_view_mode_display ();
                }
        }
-
-       /* turn buttons related to vpot mode on or off as required */
-       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 ();
-       }
 }
 
 void
@@ -2150,3 +2164,21 @@ MackieControlProtocol::selected (boost::shared_ptr<Route> r) const
        }
        return false;
 }
+
+boost::shared_ptr<Route>
+MackieControlProtocol::first_selected_route () const
+{
+       if (_last_selected_routes.empty()) {
+               return boost::shared_ptr<Route>();
+       }
+
+       boost::shared_ptr<Route> r = _last_selected_routes.front().lock();
+
+       return r; /* may be null */
+}
+
+boost::shared_ptr<Route>
+MackieControlProtocol::subview_route () const
+{
+       return _subview_route;
+}