add new API to ControlProtocol to allow GUI to specify left-most mixer strip
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 1 Feb 2017 10:46:42 +0000 (11:46 +0100)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 1 Feb 2017 10:46:42 +0000 (11:46 +0100)
Subject To Change. Mileage May Vary. Offer Not Good In All Territories.

libs/surfaces/control_protocol/control_protocol.cc
libs/surfaces/control_protocol/control_protocol/control_protocol.h

index 8c2a1217790063cd4650d6debddda2a54149f41e..675294bbd98bb46541f387e421e87d712edc0fdd 100644 (file)
@@ -57,7 +57,7 @@ PBD::Signal0<void>          ControlProtocol::ClearStripableSelection;
 
 PBD::Signal1<void,StripableNotificationListPtr> ControlProtocol::StripableSelectionChanged;
 
-Glib::Threads::Mutex ControlProtocol::first_selected_mutex;
+Glib::Threads::Mutex ControlProtocol::special_stripable_mutex;
 boost::weak_ptr<Stripable> ControlProtocol::_first_selected_stripable;
 StripableNotificationList ControlProtocol::_last_selected;
 bool ControlProtocol::selection_connected = false;
@@ -346,14 +346,28 @@ ControlProtocol::set_state (XMLNode const & node, int /* version */)
 boost::shared_ptr<Stripable>
 ControlProtocol::first_selected_stripable ()
 {
-       Glib::Threads::Mutex::Lock lm (first_selected_mutex);
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
        return _first_selected_stripable.lock();
 }
 
+boost::shared_ptr<Stripable>
+ControlProtocol::leftmost_mixer_stripable ()
+{
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
+       return _first_selected_stripable.lock();
+}
+
+void
+ControlProtocol::set_leftmost_mixer_stripable (boost::shared_ptr<Stripable> s)
+{
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
+       _first_selected_stripable = s;
+}
+
 void
 ControlProtocol::set_first_selected_stripable (boost::shared_ptr<Stripable> s)
 {
-       Glib::Threads::Mutex::Lock lm (first_selected_mutex);
+       Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
        _first_selected_stripable = s;
 }
 
@@ -365,7 +379,7 @@ ControlProtocol::stripable_selection_changed (StripableNotificationListPtr sp)
        _last_selected = *sp;
 
        {
-               Glib::Threads::Mutex::Lock lm (first_selected_mutex);
+               Glib::Threads::Mutex::Lock lm (special_stripable_mutex);
 
                if (!_last_selected.empty()) {
                        if (!had_selection) {
index 2485ca84ac892af336fbd0206d422d7f9071700e..987a8bcac4b88f1602b0bcf41cb1819645e0c00e 100644 (file)
@@ -95,6 +95,9 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope
        static boost::shared_ptr<ARDOUR::Stripable> first_selected_stripable ();
        static void set_first_selected_stripable (boost::shared_ptr<ARDOUR::Stripable>);
 
+       static boost::shared_ptr<ARDOUR::Stripable> leftmost_mixer_stripable ();
+       static void set_leftmost_mixer_stripable (boost::shared_ptr<ARDOUR::Stripable>);
+
        /* the model here is as follows:
 
           we imagine most control surfaces being able to control
@@ -156,7 +159,8 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope
         bool _active;
 
 
-        static Glib::Threads::Mutex first_selected_mutex;
+        static Glib::Threads::Mutex special_stripable_mutex;
+        static boost::weak_ptr<ARDOUR::Stripable> _leftmost_mixer_stripable;
         static boost::weak_ptr<ARDOUR::Stripable> _first_selected_stripable;
         static StripableNotificationList _last_selected;
         static void stripable_selection_changed (StripableNotificationListPtr);