OSC: Make sure group name for select gets updated
[ardour.git] / libs / surfaces / osc / osc.h
index 4c53bcbda00a1a5684799cba1d44589d22a993ef..199987367790f3f8e7e9b204182e06b5cab35d17 100644 (file)
@@ -88,7 +88,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        bool get_active () const;
 
        // generic osc send
-
+       Glib::Threads::Mutex _lo_lock;
        int float_message (std::string, float value, lo_address addr);
        int int_message (std::string, int value, lo_address addr);
        int text_message (std::string path, std::string val, lo_address addr);
@@ -109,6 +109,13 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                All
        };
 
+       enum OSCTempMode {
+               TempOff = 0,
+               GroupOnly = 1,
+               VCAOnly = 2,
+               BusOnly = 3
+       };
+
        typedef std::vector<boost::shared_ptr<ARDOUR::Stripable> > Sorted;
        Sorted get_sorted_stripables(std::bitset<32> types, bool cue, uint32_t custom, Sorted my_list);
        typedef std::map<boost::shared_ptr<ARDOUR::AutomationControl>, uint32_t> FakeTouchMap;
@@ -128,7 +135,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                PBD::Controllable::GroupControlDisposition usegroup;    // current group disposition
                Sorted custom_strips;           // a sorted list of user selected strips
                uint32_t custom_mode;           // use custom strip list
+               OSCTempMode temp_mode;          // use temp strip list
                Sorted temp_strips;                     // temp strip list for grouponly, vcaonly, auxonly
+               boost::shared_ptr<ARDOUR::Stripable> temp_master; // stripable this surface uses as temp master
                Sorted strips;                          // list of stripables for this surface
                // strips
                uint32_t bank;                          // current bank
@@ -139,7 +148,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                OSCSelectObserver* sel_obs;     // So we can sync select feedback with selected channel
                uint32_t expand;                        // Used by /select/select
                bool expand_enable;                     // use expand instead of select
-               boost::shared_ptr<ARDOUR::Stripable> select; // stripable this surface uses (maybe expand strip)                
+               boost::shared_ptr<ARDOUR::Stripable> expand_strip; // stripable this surface uses for expand
+               boost::shared_ptr<ARDOUR::Stripable> select; // stripable this surface uses as selected
                int plug_page;                          // current plugin page
                uint32_t plug_page_size;        // plugin page size (number of controls)
                int plugin_id;                  // id of current plugin
@@ -174,9 +184,22 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                 * [12] - Send Playhead position like primary/secondary GUI clocks
                 * [13] - Send well known feedback (for /select/command
                 * [14] - use OSC 1.0 only (#reply -> /reply)
+                *
+                * Strip_type bits:
+                * [0] - Audio Tracks
+                * [1] - Midi Tracks
+                * [2] - Audio Bus
+                * [3] - Midi Bus
+                * [4] - VCAs
+                * [5] - master
+                * [6] - Monitor
+                * [7] - Aux Bus
+                * [8] - Selected
+                * [9] - Hidden
+                * [10] - Use Groups
+                * [11] - Global Expand
                 */
 
-
 // storage for  each surface's settings
        mutable Glib::Threads::Mutex surfaces_lock;
        typedef std::vector<OSCSurface> Surface;
@@ -192,7 +215,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                uint32_t not_ready;                             // number of 1st device, 0 = ready
                Sorted custom_strips;                   // a sorted list of user selected strips
                uint32_t custom_mode;                   // use custom strip list
-               Sorted temp_strips;                     // temp strip list for grouponly, vcaonly, auxonly
+               OSCTempMode temp_mode;                  // use custom strip list
+               Sorted temp_strips;                             // temp strip list for grouponly, vcaonly, auxonly
                std::bitset<32> strip_types;    // strip_types for this linkset
                Sorted strips;                                  // list of valid strips in order for this set
        };
@@ -302,6 +326,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int touch_detect (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
        int fake_touch (boost::shared_ptr<ARDOUR::AutomationControl> ctrl);
 
+       int collect (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
+
        int route_get_sends (lo_message msg);
        int route_get_receives(lo_message msg);
        void routes_list (lo_message msg);
@@ -354,6 +380,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK_MSG(route_get_receives);
        PATH_CALLBACK_MSG(routes_list);
        PATH_CALLBACK_MSG(group_list);
+       PATH_CALLBACK_MSG(sel_previous);
+       PATH_CALLBACK_MSG(sel_next);
        PATH_CALLBACK_MSG(surface_list);
        PATH_CALLBACK_MSG(transport_sample);
        PATH_CALLBACK_MSG(transport_speed);
@@ -496,7 +524,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK1_MSG(bank_delta,f);
        PATH_CALLBACK1_MSG(use_group,f);
        PATH_CALLBACK1_MSG_s(name_session,s);
-       PATH_CALLBACK1_MSG_s(sel_group,s);
        PATH_CALLBACK1_MSG_s(sel_rename,s);
        PATH_CALLBACK1_MSG_s(sel_comment,s);
        PATH_CALLBACK1_MSG(sel_recenable,i);
@@ -625,6 +652,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK2_MSG(strip_gui_select,i,i);
        PATH_CALLBACK2_MSG(route_set_gain_dB,i,f);
        PATH_CALLBACK2_MSG(route_set_gain_fader,i,f);
+       PATH_CALLBACK2_MSG(strip_db_delta,i,f);
        PATH_CALLBACK2_MSG(route_set_trim_dB,i,f);
        PATH_CALLBACK2_MSG(route_set_pan_stereo_position,i,f);
        PATH_CALLBACK2_MSG(route_set_pan_stereo_width,i,f);
@@ -691,6 +719,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int refresh_surface (lo_message msg);
        int custom_clear (lo_message msg);
        int custom_mode (float state, lo_message msg);
+       int _custom_mode (uint32_t state, lo_address addr);
        int name_session (char *n, lo_message msg);
        // select
        int sel_send_pagesize (uint32_t size, lo_message msg);
@@ -738,6 +767,10 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int sel_dB_delta (float delta, lo_message msg);
        int sel_trim (float val, lo_message msg);
        int sel_hide (uint32_t state, lo_message msg);
+       int sel_previous (lo_message msg);
+       int sel_next (lo_message msg);
+       int sel_delta (int delta, lo_message msg);
+       boost::shared_ptr<ARDOUR::Send> get_send (boost::shared_ptr<ARDOUR::Stripable> st, lo_address addr);
        int sel_pan_position (float val, lo_message msg);
        int sel_pan_width (float val, lo_message msg);
        int sel_sendgain (int id, float dB, lo_message msg);
@@ -764,7 +797,10 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int sel_eq_freq (int id, float val, lo_message msg);
        int sel_eq_q (int id, float val, lo_message msg);
        int sel_eq_shape (int id, float val, lo_message msg);
+       int set_temp_mode (lo_address addr);
        int parse_sel_group (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
+       int parse_sel_vca (const char *path, const char* types, lo_arg **argv, int argc, lo_message msg);
+       boost::shared_ptr<ARDOUR::VCA> get_vca_by_name (std::string vname);
 
        void listen_to_route (boost::shared_ptr<ARDOUR::Stripable>, lo_address);