#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,
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.
/// 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 );