OSC: Finished Select send levels
[ardour.git] / libs / surfaces / osc / osc.h
index 6d33fabd4e3040a81b7bf7ccd7205b33c9dfff91..304c747af075422037db1500e0797d13b2bc1adc 100644 (file)
@@ -44,6 +44,7 @@
 class OSCControllable;
 class OSCRouteObserver;
 class OSCGlobalObserver;
+class OSCSelectObserver;
 
 namespace ARDOUR {
 class Session;
@@ -98,17 +99,20 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
 // keep a surface's global setup by remote server url
        struct OSCSurface {
        public:
-               std::string remote_url;                 // the url these setting belong to
-               uint32_t bank;                                  // current bank
-               uint32_t bank_size;                             // size of banks for this surface
-               std::bitset<32> strip_types;    // what strip types are a part of this bank
-               std::bitset<32> feedback;               // What is fed back? strips/meters/timecode/bar_beat/global
-               int gainmode;                                   // what kind of faders do we have Gain db or position 0 to 1023?
-               uint32_t surface_sel;                   // which strip within the bank is locally selected
+               std::string remote_url;         // the url these setting belong to
+               uint32_t bank;                          // current bank
+               uint32_t bank_size;                     // size of banks for this surface
+               std::bitset<32> strip_types;// what strip types are a part of this bank
+               uint32_t nstrips;                       // how many strips are there for strip_types
+               std::bitset<32> feedback;       // What is fed back? strips/meters/timecode/bar_beat/global
+               int gainmode;                           // what kind of faders do we have Gain db or position 0 to 1023?
+               uint32_t surface_sel;           // which strip within the bank is locally selected
+               OSCSelectObserver* sel_obs;     // So we can sync select feedback with selected channel
                //StripableList strips; //list of stripables for the current bank
        };
                /*
                 * Reminder of what strip_types there are
+                * XXX these have changed!!!
                AudioTrack = 0x1,
                MidiTrack = 0x2,
                AudioBus = 0x4,
@@ -132,6 +136,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                 * [7] - Send metering as dB or positional depending on gainmode
                 * [8] - Send metering as 16 bits (led strip)
                 * [9] - Send signal present (signal greater than -20dB)
+                * [10] - Selection is local
                 */
 
 
@@ -322,6 +327,18 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK1_MSG(set_surface_strip_types,i);
        PATH_CALLBACK1_MSG(set_surface_feedback,i);
        PATH_CALLBACK1_MSG(set_surface_gainmode,i);
+       PATH_CALLBACK1_MSG(sel_recenable,i);
+       PATH_CALLBACK1_MSG(sel_recsafe,i);
+       PATH_CALLBACK1_MSG(sel_mute,i);
+       PATH_CALLBACK1_MSG(sel_solo,i);
+       PATH_CALLBACK1_MSG(sel_monitor_input,i);
+       PATH_CALLBACK1_MSG(sel_monitor_disk,i);
+       PATH_CALLBACK1_MSG(sel_phase,i);
+       PATH_CALLBACK1_MSG(sel_gain,f);
+       PATH_CALLBACK1_MSG(sel_fader,f);
+       PATH_CALLBACK1_MSG(sel_trim,f);
+       PATH_CALLBACK1_MSG(sel_pan_position,f);
+       PATH_CALLBACK1_MSG(sel_pan_width,f);
 
 #define PATH_CALLBACK2(name,arg1type,arg2type)                 \
         static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
@@ -371,6 +388,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                return 0;                                               \
        }
 
+       PATH_CALLBACK2_MSG(sel_sendgain,i,f);
+       PATH_CALLBACK2_MSG(sel_sendfader,i,f);
+
        PATH_CALLBACK4(set_surface,i,i,i,i);
        PATH_CALLBACK2(locate,i,i);
        PATH_CALLBACK2(loop_location,i,i);
@@ -380,6 +400,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK2_MSG(route_recsafe,i,i);
        PATH_CALLBACK2_MSG(route_monitor_input,i,i);
        PATH_CALLBACK2_MSG(route_monitor_disk,i,i);
+       PATH_CALLBACK2_MSG(strip_phase,i,i);
+       PATH_CALLBACK2_MSG(strip_select,i,i);
+       PATH_CALLBACK2_MSG(strip_gui_select,i,i);
        PATH_CALLBACK2_MSG(route_set_gain_abs,i,f);
        PATH_CALLBACK2_MSG(route_set_gain_dB,i,f);
        PATH_CALLBACK2_MSG(route_set_gain_fader,i,f);
@@ -389,6 +412,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        PATH_CALLBACK2_MSG(route_set_pan_stereo_width,i,f);
        PATH_CALLBACK3(route_set_send_gain_abs,i,i,f);
        PATH_CALLBACK3(route_set_send_gain_dB,i,i,f);
+       PATH_CALLBACK3(route_set_send_fader,i,i,f);
        PATH_CALLBACK4(route_plugin_parameter,i,i,i,f);
        PATH_CALLBACK3(route_plugin_parameter_print,i,i,i);
 
@@ -398,6 +422,10 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int route_recsafe (int ssid, int yn, lo_message msg);
        int route_monitor_input (int rid, int yn, lo_message msg);
        int route_monitor_disk (int rid, int yn, lo_message msg);
+       int strip_phase (int rid, int yn, lo_message msg);
+       int strip_select (int rid, int yn, lo_message msg);
+       int _strip_select (int rid, lo_address addr);
+       int strip_gui_select (int rid, int yn, lo_message msg);
        int route_set_gain_abs (int rid, float level, lo_message msg);
        int route_set_gain_dB (int rid, float dB, lo_message msg);
        int route_set_gain_fader (int rid, float pos, lo_message msg);
@@ -407,6 +435,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int route_set_pan_stereo_width (int rid, float percent, lo_message msg);
        int route_set_send_gain_abs (int rid, int sid, float val, lo_message msg);
        int route_set_send_gain_dB (int rid, int sid, float val, lo_message msg);
+       int route_set_send_fader (int rid, int sid, float val, lo_message msg);
        int route_plugin_parameter (int rid, int piid,int par, float val, lo_message msg);
        int route_plugin_parameter_print (int rid, int piid,int par, lo_message msg);
 
@@ -427,18 +456,34 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int master_set_mute (uint32_t state);
        int monitor_set_gain (float dB);
        int monitor_set_fader (uint32_t position);
+       int sel_recenable (uint32_t state, lo_message msg);
+       int sel_recsafe (uint32_t state, lo_message msg);
+       int sel_mute (uint32_t state, lo_message msg);
+       int sel_solo (uint32_t state, lo_message msg);
+       int sel_monitor_input (uint32_t state, lo_message msg);
+       int sel_monitor_disk (uint32_t state, lo_message msg);
+       int sel_phase (uint32_t state, lo_message msg);
+       int sel_gain (float state, lo_message msg);
+       int sel_fader (float state, lo_message msg);
+       int sel_trim (float val, lo_message msg);
+       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);
+       int sel_sendfader (int id, float pos, lo_message msg);
 
        void listen_to_route (boost::shared_ptr<ARDOUR::Stripable>, lo_address);
        void end_listen (boost::shared_ptr<ARDOUR::Stripable>, lo_address);
        void drop_route (boost::weak_ptr<ARDOUR::Stripable>);
+       void gui_selection_changed (ARDOUR::StripableNotificationListPtr stripables);
 
        void route_name_changed (const PBD::PropertyChange&, boost::weak_ptr<ARDOUR::Route> r, lo_address addr);
 
        void update_clock ();
        bool periodic (void);
        sigc::connection periodic_connection;
+       PBD::ScopedConnectionList session_connections;
 
-       int route_send_fail (std::string path, uint32_t ssid, lo_message msg);
+       int route_send_fail (std::string path, uint32_t ssid, float val, lo_address addr);
 
        typedef std::list<OSCRouteObserver*> RouteObservers;