X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fstrip.h;h=369513dd60540c05ec73ae49adfaf178bd23bd64;hb=e14694bfa3cc50f362fe2c7499782d13d055de3b;hp=d5fdc6c17c5917b82f0f8fb3cf4be23d9588eb22;hpb=ba5e71b50f53c97c1ce806d9582c4c32970bdcf6;p=ardour.git diff --git a/libs/surfaces/mackie/strip.h b/libs/surfaces/mackie/strip.h index d5fdc6c17c..369513dd60 100644 --- a/libs/surfaces/mackie/strip.h +++ b/libs/surfaces/mackie/strip.h @@ -7,6 +7,7 @@ #include "evoral/Parameter.hpp" #include "pbd/property_basics.h" +#include "pbd/ringbuffer.h" #include "pbd/signals.h" #include "ardour/types.h" @@ -14,15 +15,18 @@ #include "control_group.h" #include "types.h" +#include "mackie_control_protocol.h" #include "midi_byte_array.h" #include "device_info.h" namespace ARDOUR { - class Route; + class Stripable; class Bundle; class ChannelCount; } +namespace ArdourSurface { + namespace Mackie { class Control; @@ -33,15 +37,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; }; @@ -55,38 +53,50 @@ public: Strip (Surface&, const std::string & name, int index, const std::map&); ~Strip(); - boost::shared_ptr route() const { return _route; } + boost::shared_ptr stripable() const { return _stripable; } void add (Control & control); int index() const { return _index; } // zero based - - void set_route (boost::shared_ptr, bool with_messages = true); + Surface* surface() const { return _surface; } + + void set_stripable (boost::shared_ptr, bool with_messages = true); // call all signal handlers manually - void notify_all(); + 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 periodic (ARDOUR::microseconds_t now_usecs); + void redisplay (ARDOUR::microseconds_t now_usecs, bool force = true); MidiByteArray display (uint32_t line_number, const std::string&); MidiByteArray blank_display (uint32_t line_number); void zero (); - void flip_mode_changed (bool notify=false); + void flip_mode_changed (); + void subview_mode_changed (); void lock_controls (); void unlock_controls (); bool locked() const { return _controls_locked; } - void gui_selection_changed (const ARDOUR::StrongRouteNotificationList&); - void notify_metering_state_changed(); + void update_selection_state (); + + void block_screen_display_for (uint32_t msecs); + void block_vpot_mode_display_for (uint32_t msecs); + private: + enum VPotDisplayMode { + Name, + Value + }; + Button* _solo; Button* _recenable; Button* _mute; @@ -101,13 +111,22 @@ private: bool _controls_locked; bool _transport_is_rolling; bool _metering_active; - uint64_t _reset_display_at; - boost::shared_ptr _route; - PBD::ScopedConnectionList route_connections; + std::string pending_display[2]; + std::string current_display[2]; + uint64_t _block_screen_redisplay_until; + uint64_t return_to_vpot_mode_display_at; + boost::shared_ptr _stripable; + PBD::ScopedConnectionList stripable_connections; + PBD::ScopedConnectionList subview_connections; + PBD::ScopedConnectionList send_connections; + int eq_band; + + ARDOUR::AutomationType _pan_mode; float _last_gain_position_written; float _last_pan_azi_position_written; float _last_pan_width_position_written; + float _last_trim_position_written; void notify_solo_changed (); void notify_mute_changed (); @@ -116,40 +135,45 @@ private: void notify_property_changed (const PBD::PropertyChange&); void notify_panner_azi_changed (bool force_update = true); void notify_panner_width_changed (bool force_update = true); - void notify_active_changed (); - void notify_route_deleted (); - + void notify_stripable_deleted (); + void notify_processor_changed (bool force_update = true); void update_automation (); void update_meter (); + std::string vpot_mode_string (); - std::string vpot_mode_string () const; + boost::shared_ptr mb_pan_controllable; - void queue_display_reset (uint32_t msecs); - void clear_display_reset (); - void reset_display (); - void do_parameter_display (ARDOUR::AutomationType, float val); - - typedef std::map > BundleMap; - BundleMap input_bundles; - BundleMap output_bundles; - - void build_input_list (const ARDOUR::ChanCount&); - void build_output_list (const ARDOUR::ChanCount&); - void maybe_add_to_bundle_map (BundleMap& bm, boost::shared_ptr, bool for_input, const ARDOUR::ChanCount&); + void return_to_vpot_mode_display (); + void next_pot_mode (); + void do_parameter_display (ARDOUR::ParameterDescriptor const&, float val, bool screen_hold = false); void select_event (Button&, ButtonState); void vselect_event (Button&, ButtonState); void fader_touch_event (Button&, ButtonState); - std::vector possible_pot_parameters; - void next_pot_mode (); - void set_vpot_parameter (Evoral::Parameter); + std::vector possible_pot_parameters; + std::vector possible_trim_parameters; + void set_vpot_parameter (ARDOUR::AutomationType); + void show_stripable_name (); void reset_saved_values (); - std::map control_by_parameter; + bool is_midi_track () const; + + void notify_eq_change (boost::weak_ptr, bool force); + void setup_eq_vpot (boost::shared_ptr); + + void notify_dyn_change (boost::weak_ptr, bool force, bool propagate_mode_change); + void setup_dyn_vpot (boost::shared_ptr); + + void notify_send_level_change (uint32_t band, bool force); + void setup_sends_vpot (boost::shared_ptr); + + void notify_trackview_change (ARDOUR::AutomationType, uint32_t band, bool force); + void setup_trackview_vpot (boost::shared_ptr); }; +} } #endif /* __ardour_mackie_control_protocol_strip_h__ */