X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fstrip.h;h=4099dce8afa9bb1e0f9112642ee8ef0978d44567;hb=4dc63966f0872efe768dad61eb9b8785d06b92d1;hp=a8213f6f89543da767caff0950a9637a02888273;hpb=e06620280b2779c69ead6d25694efaf81d346f53;p=ardour.git diff --git a/libs/surfaces/mackie/strip.h b/libs/surfaces/mackie/strip.h index a8213f6f89..4099dce8af 100644 --- a/libs/surfaces/mackie/strip.h +++ b/libs/surfaces/mackie/strip.h @@ -4,7 +4,10 @@ #include #include +#include "evoral/Parameter.hpp" + #include "pbd/property_basics.h" +#include "pbd/ringbuffer.h" #include "pbd/signals.h" #include "ardour/types.h" @@ -21,6 +24,8 @@ namespace ARDOUR { class ChannelCount; } +namespace ArdourSurface { + namespace Mackie { class Control; @@ -31,15 +36,9 @@ class Fader; class Meter; class SurfacePort; -struct StripControlDefinition { - const char* name; - uint32_t base_id; - Control* (*factory)(Surface&, int index, const char* name, Group&); -}; - struct GlobalControlDefinition { const char* name; - uint32_t id; + int id; Control* (*factory)(Surface&, int index, const char* name, Group&); const char* group_name; }; @@ -58,48 +57,35 @@ public: void add (Control & control); int index() const { return _index; } // zero based - void set_route (boost::shared_ptr); + void set_route (boost::shared_ptr, bool with_messages = true); // call all signal handlers manually void notify_all(); void handle_button (Button&, ButtonState bs); void handle_fader (Fader&, float position); + void handle_fader_touch (Fader&, bool touch_on); void handle_pot (Pot&, float delta); void periodic (uint64_t now_usecs); + void redisplay (); MidiByteArray display (uint32_t line_number, const std::string&); MidiByteArray blank_display (uint32_t line_number); - MidiByteArray zero (); + + void zero (); void flip_mode_changed (bool notify=false); void lock_controls (); void unlock_controls (); - - MidiByteArray gui_selection_changed (ARDOUR::RouteNotificationListPtr); + bool locked() const { return _controls_locked; } + + void gui_selection_changed (const ARDOUR::StrongRouteNotificationList&); + + void notify_metering_state_changed(); private: - enum PotMode { - Gain, - PanAzimuth, - PanWidth, - PanElevation, - PanFrontBack, - PanLFE, - Input, - Output, - Send1, - Send2, - Send3, - Send4, - Send5, - Send6, - Send7, - Send8, - }; - Button* _solo; Button* _recenable; Button* _mute; @@ -107,19 +93,20 @@ private: Button* _vselect; Button* _fader_touch; Pot* _vpot; - PotMode _vpot_mode; - PotMode _preflip_vpot_mode; Fader* _fader; Meter* _meter; int _index; Surface* _surface; bool _controls_locked; + bool _transport_is_rolling; + bool _metering_active; uint64_t _reset_display_at; boost::shared_ptr _route; PBD::ScopedConnectionList route_connections; float _last_gain_position_written; - float _last_pan_position_written; + float _last_pan_azi_position_written; + float _last_pan_width_position_written; void notify_solo_changed (); void notify_mute_changed (); @@ -139,7 +126,16 @@ private: void queue_display_reset (uint32_t msecs); void clear_display_reset (); void reset_display (); + + struct RedisplayRequest { + ARDOUR::AutomationType type; + float val; + }; + + RingBuffer redisplay_requests; + void do_parameter_display (ARDOUR::AutomationType, float val); + void queue_parameter_display (ARDOUR::AutomationType, float val); typedef std::map > BundleMap; BundleMap input_bundles; @@ -153,11 +149,16 @@ private: void vselect_event (Button&, ButtonState); void fader_touch_event (Button&, ButtonState); - std::vector current_pot_modes; + std::vector possible_pot_parameters; void next_pot_mode (); - void set_vpot_mode (PotMode); + void set_vpot_parameter (Evoral::Parameter); + + void reset_saved_values (); + + std::map control_by_parameter; }; +} } #endif /* __ardour_mackie_control_protocol_strip_h__ */