Fix some more warnings.
[ardour.git] / libs / surfaces / mackie / surface.h
index 8bff3c45388714a2b829cdfb8701147b17413dc6..05983cbfa22175b03f219e3669553d9e32261948 100644 (file)
@@ -3,11 +3,14 @@
 
 #include "controls.h"
 #include "types.h"
+#include <stdint.h>
 
 namespace Mackie
 {
 
 class MackieButtonHandler;
+class SurfacePort;
+class MackieMidiBuilder;
 
 /**
        This represents an entire control surface, made up of Groups,
@@ -52,11 +55,13 @@ public:
                These are alternative addressing schemes
                They use maps because the indices aren't always
                0-based.
+               
+               Indexed by raw_id not by id. @see Control for the distinction.
        */
-       std::map<int,Control*> faders;
-       std::map<int,Control*> pots;
-       std::map<int,Control*> buttons;
-       std::map<int,Control*> leds;
+       std::map<int,Fader*> faders;
+       std::map<int,Pot*> pots;
+       std::map<int,Button*> buttons;
+       std::map<int,Led*> leds;
 
        /// no strip controls in here because they usually
        /// have the same names.
@@ -78,7 +83,38 @@ public:
        
        /// map button ids to calls to press_ and release_ in mbh
        virtual void handle_button( MackieButtonHandler & mbh, ButtonState bs, Button & button ) = 0;
+
+public:
+       /// display an indicator of the first switched-in Route. Do nothing by default.
+       virtual void display_bank_start( SurfacePort &, MackieMidiBuilder &, uint32_t /*current_bank*/ ) {};
+               
+       /// called from MackieControlPRotocol::zero_all to turn things off
+       virtual void zero_all( SurfacePort &, MackieMidiBuilder & ) {};
+
+       /// turn off leds around the jog wheel. This is for surfaces that use a pot
+       /// pretending to be a jog wheel.
+       virtual void blank_jog_ring( SurfacePort &, MackieMidiBuilder & ) {};
+
+       virtual bool has_timecode_display() const = 0;
+       virtual void display_timecode( SurfacePort &, MackieMidiBuilder &, const std::string & /*timecode*/, const std::string & /*timecode_last*/) {};
        
+public:
+       /**
+               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
+               per second, 50.5 is 5 clicks per second.
+       */
+       virtual float scrub_scaling_factor() = 0;
+
+       /**
+               The scaling factor function for speed increase and decrease. At
+               low transport speeds this should return a small value, for high transport
+               speeds, this should return an exponentially larger value. This provides
+               high definition control at low speeds and quick speed changes to/from
+               higher speeds.
+       */
+       virtual float scaled_delta( const ControlState & state, float current_speed ) = 0;
+
 protected:
        virtual void init_controls() = 0;
        virtual void init_strips( uint32_t max_strips, uint32_t unit_strips );