X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fsurface.h;h=3225e23ba06bfa2f7194b55f4752f5dcd1fa5f1e;hb=e6e2b6800e081c1a416638c4312b81415e190320;hp=2473930528d027d8404356484090c71ddd4e2b81;hpb=ccf505c3a27f08dcfe74e32a66108f6d8eafb038;p=ardour.git diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h index 2473930528..3225e23ba0 100644 --- a/libs/surfaces/mackie/surface.h +++ b/libs/surfaces/mackie/surface.h @@ -3,9 +3,14 @@ #include +#include + +#include "pbd/signals.h" #include "pbd/xml++.h" #include "midi++/types.h" +#include "ardour/types.h" + #include "control_protocol/types.h" #include "controls.h" @@ -17,7 +22,8 @@ namespace MIDI { } namespace ARDOUR { - class Route; + class Stripable; + class Port; } class MidiByteArray; @@ -39,7 +45,7 @@ class Jog; class Pot; class Led; -class Surface : public PBD::ScopedConnectionList +class Surface : public PBD::ScopedConnectionList, public sigc::trackable { public: Surface (MackieControlProtocol&, const std::string& name, uint32_t number, surface_type_t stype); @@ -49,10 +55,9 @@ public: uint32_t number() const { return _number; } const std::string& name() { return _name; } - void say_hello (); + void connected (); bool active() const { return _active; } - void drop_routes (); typedef std::vector Controls; Controls controls; @@ -63,7 +68,7 @@ public: std::map leds; std::map meters; std::map controls_by_device_independent_id; - + Mackie::JogWheel* jog_wheel() const { return _jog_wheel; } Fader* master_fader() const { return _master_fader; } @@ -74,7 +79,8 @@ public: uint32_t n_strips (bool with_locked_strips = true) const; Strip* nth_strip (uint32_t n) const; - bool route_is_locked_to_strip (boost::shared_ptr) const; + bool stripable_is_locked_to_strip (boost::shared_ptr) const; + bool stripable_is_mapped (boost::shared_ptr) const; /// This collection owns the groups typedef std::map Groups; @@ -82,11 +88,13 @@ public: SurfacePort& port() const { return *_port; } - void map_routes (const std::vector >& routes); + void map_stripables (const std::vector >&); const MidiByteArray& sysex_hdr() const; - void periodic (uint64_t now_usecs); + void periodic (ARDOUR::microseconds_t now_usecs); + void redisplay (ARDOUR::microseconds_t now_usecs, bool force); + void hui_heartbeat (); void handle_midi_pitchbend_message (MIDI::Parser&, MIDI::pitchbend_t, uint32_t channel_id); void handle_midi_controller_message (MIDI::Parser&, MIDI::EventTwoBytes*); @@ -104,7 +112,7 @@ public: /// display an indicator of the first switched-in Route. Do nothing by default. void display_bank_start (uint32_t /*current_bank*/); - + /// called from MackieControlProtocol::zero_all to turn things off void zero_all (); void zero_controls (); @@ -121,7 +129,7 @@ public: void recalibrate_faders (); void toggle_backlight (); void set_touch_sensitivity (int); - + /** This is used to calculate the clicks per second that define a transport speed of 1.0 for the jog wheel. 100.0 is 10 clicks @@ -143,25 +151,29 @@ public: // be two characters void show_two_char_display (const std::string & msg, const std::string & dots = " "); void show_two_char_display (unsigned int value, const std::string & dots = " "); - - void update_view_mode_display (); + + void update_view_mode_display (bool with_helpful_text); void update_flip_mode_display (); - void gui_selection_changed (const ARDOUR::StrongRouteNotificationList&); + void subview_mode_changed (); MackieControlProtocol& mcp() const { return _mcp; } void next_jog_mode (); void set_jog_mode (Mackie::JogWheel::Mode); - + void notify_metering_state_changed(); void turn_it_on (); + void display_message_for (std::string const& msg, uint64_t msecs); + + bool connection_handler (boost::weak_ptr, std::string name1, boost::weak_ptr, std::string name2, bool); + + void master_monitor_may_have_changed (); + XMLNode& get_state (); int set_state (const XMLNode&, int version); - protected: - private: MackieControlProtocol& _mcp; SurfacePort* _port; @@ -173,15 +185,30 @@ public: Mackie::JogWheel* _jog_wheel; Fader* _master_fader; float _last_master_gain_written; + PBD::ScopedConnection master_connection; void handle_midi_sysex (MIDI::Parser&, MIDI::byte *, size_t count); MidiByteArray host_connection_query (MidiByteArray& bytes); MidiByteArray host_connection_confirmation (const MidiByteArray& bytes); + void say_hello (); void init_controls (); void init_strips (uint32_t n); void setup_master (); void master_gain_changed (); + + enum ConnectionState { + InputConnected = 0x1, + OutputConnected = 0x2 + }; + + int connection_state; + + MidiByteArray display_line (std::string const& msg, int line_num); + + public: + /* IP MIDI devices need to keep a handle on this and destroy it */ + GSource* input_source; }; }