X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fosc%2Fosc.h;h=becff28b6d79b2ddcc47aa7bfeae934cd4463522;hb=f03f2e5c3f27679adcf6c3fa3425835643ba5b28;hp=38aad2945fac0f4c2ef5f455d266f004b8a19698;hpb=22b07e0233a29d9633ffa825a79503befaf2e16e;p=ardour.git diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 38aad2945f..becff28b6d 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -37,6 +37,8 @@ #include "ardour/types.h" #include "control_protocol/control_protocol.h" +#include "i18n.h" + class OSCControllable; class OSCRouteObserver; @@ -69,16 +71,31 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI XMLNode& get_state (); int set_state (const XMLNode&, int version); + bool has_editor () const { return true; } + void* get_gui () const; + void tear_down_gui (); + int set_active (bool yn); bool get_active () const; int set_feedback (bool yn); bool get_feedback () const; - void set_namespace_root (std::string); int start (); int stop (); + static void* request_factory (uint32_t); + + enum OSCDebugMode { + Off, + Unhandled, + All + }; + + std::string get_server_url (); + void set_debug_mode (OSCDebugMode m) { _debugmode = m; } + OSCDebugMode get_debug_mode () { return _debugmode; } + protected: void thread_init (); void do_request (OSCUIRequest*); @@ -96,8 +113,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI lo_server _osc_unix_server; std::string _osc_unix_socket_path; std::string _osc_url_file; - std::string _namespace_root; bool _send_route_changes; + OSCDebugMode _debugmode; void register_callbacks (); @@ -109,7 +126,6 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI // end "Application Hook" handles - std::string get_server_url (); std::string get_unix_server_url (); void send_current_value (const char* path, lo_arg** argv, int argc, lo_message msg); @@ -121,25 +137,37 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI static int _catchall (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data); void routes_list (lo_message msg); - void transport_frame(lo_message msg); + void transport_frame (lo_message msg); + void transport_speed (lo_message msg); + void record_enabled (lo_message msg); + +#define OSC_DEBUG \ + if (_debugmode == All) { \ + debugmsg (dgettext(PACKAGE, "OSC"), path, types, argv, argc); \ + } #define PATH_CALLBACK_MSG(name) \ static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ } \ - int cb_ ## name (const char *, const char *, lo_arg **, int, void *data) { \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \ + OSC_DEBUG; \ name (data); \ return 0; \ } PATH_CALLBACK_MSG(routes_list); PATH_CALLBACK_MSG(transport_frame); + PATH_CALLBACK_MSG(transport_speed); + PATH_CALLBACK_MSG(record_enabled); #define PATH_CALLBACK(name) \ static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ } \ - int cb_ ## name (const char *, const char *, lo_arg **, int, void *) { \ + int cb_ ## name (const char *path, const char *types, lo_arg ** argv, int argc, void *) { \ + OSC_DEBUG; \ + if (argc > 0 && !strcmp (types, "f") && argv[0]->f != 1.0) { return 0; } \ name (); \ return 0; \ } @@ -161,12 +189,50 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK(toggle_punch_out); PATH_CALLBACK(rec_enable_toggle); PATH_CALLBACK(toggle_all_rec_enables); + PATH_CALLBACK(all_tracks_rec_in); + PATH_CALLBACK(all_tracks_rec_out); + PATH_CALLBACK(remove_marker_at_playhead); + PATH_CALLBACK(mark_in); + PATH_CALLBACK(mark_out); + PATH_CALLBACK(toggle_click); + PATH_CALLBACK(midi_panic); + PATH_CALLBACK(toggle_roll); + PATH_CALLBACK(stop_forget); + PATH_CALLBACK(set_punch_range); + PATH_CALLBACK(set_loop_range); + PATH_CALLBACK(set_session_range); + PATH_CALLBACK(toggle_monitor_mute); + PATH_CALLBACK(toggle_monitor_dim); + PATH_CALLBACK(toggle_monitor_mono); + PATH_CALLBACK(quick_snapshot_stay); + PATH_CALLBACK(quick_snapshot_switch); + PATH_CALLBACK(fit_1_track); + PATH_CALLBACK(fit_2_tracks); + PATH_CALLBACK(fit_4_tracks); + PATH_CALLBACK(fit_8_tracks); + PATH_CALLBACK(fit_16_tracks); + PATH_CALLBACK(fit_32_tracks); + PATH_CALLBACK(fit_all_tracks); + PATH_CALLBACK(zoom_100_ms); + PATH_CALLBACK(zoom_1_sec); + PATH_CALLBACK(zoom_10_sec); + PATH_CALLBACK(zoom_1_min); + PATH_CALLBACK(zoom_5_min); + PATH_CALLBACK(zoom_10_min); + PATH_CALLBACK(zoom_to_session); + PATH_CALLBACK(temporal_zoom_in); + PATH_CALLBACK(temporal_zoom_out); + PATH_CALLBACK(scroll_up_1_track); + PATH_CALLBACK(scroll_dn_1_track); + PATH_CALLBACK(scroll_up_1_page); + PATH_CALLBACK(scroll_dn_1_page); #define PATH_CALLBACK1(name,type,optional) \ static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ } \ - int cb_ ## name (const char *, const char *, lo_arg **argv, int argc, void *) { \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ + OSC_DEBUG; \ if (argc > 0) { \ name (optional argv[0]->type); \ } \ @@ -176,11 +242,15 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK1(set_transport_speed,f,); PATH_CALLBACK1(access_action,s,&); + PATH_CALLBACK1(jump_by_bars,f,); + PATH_CALLBACK1(jump_by_seconds,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) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ } \ - int cb_ ## name (const char *, const char *, lo_arg **argv, int argc, void *) { \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ + OSC_DEBUG; \ if (argc > 1) { \ name (argv[0]->arg1type, argv[1]->arg2type); \ } \ @@ -191,7 +261,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ } \ - int cb_ ## name (const char *, const char *, lo_arg **argv, int argc, void *) { \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ + OSC_DEBUG; \ if (argc > 1) { \ name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type); \ } \ @@ -202,7 +273,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \ return static_cast(user_data)->cb_ ## name (path, types, argv, argc, data); \ } \ - int cb_ ## name (const char *, const char *, lo_arg **argv, int argc, void *) { \ + int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *) { \ + OSC_DEBUG; \ if (argc > 1) { \ name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type,argv[3]->arg4type); \ } \ @@ -216,6 +288,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK2(route_recenable,i,i); PATH_CALLBACK2(route_set_gain_abs,i,f); PATH_CALLBACK2(route_set_gain_dB,i,f); + PATH_CALLBACK2(route_set_gain_fader,i,f); PATH_CALLBACK2(route_set_trim_abs,i,f); PATH_CALLBACK2(route_set_trim_dB,i,f); PATH_CALLBACK2(route_set_pan_stereo_position,i,f); @@ -230,6 +303,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int route_recenable (int rid, int yn); int route_set_gain_abs (int rid, float level); int route_set_gain_dB (int rid, float dB); + int route_set_gain_fader (int rid, float pos); int route_set_trim_abs (int rid, float level); int route_set_trim_dB (int rid, float dB); int route_set_pan_stereo_position (int rid, float left_right_fraction); @@ -247,12 +321,15 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI void update_clock (); - typedef std::list RouteObservers; RouteObservers route_observers; + void debugmsg (const char *prefix, const char *path, const char* types, lo_arg **argv, int argc); static OSC* _instance; + + mutable void *gui; + void build_gui (); }; } // namespace