class Button : public Control
{
public:
+ enum base_id_t {
+ recenable_base_id = 0x0,
+ solo_base_id = 0x08,
+ mute_base_id = 0x10,
+ select_base_id = 0x18,
+ vselect_base_id = 0x20,
+ fader_touch_base_id = 0xe0,
+ };
+
enum ButtonID {
Io = 0x28,
Sends = 0x29,
class Control
{
public:
- enum base_id_t {
- /* ID's associated with pot (Controller) messages */
- pot_base_id = 0x30,
- jog_base_id = 0x3c,
- /* ID's associated with button (NoteOn) messages */
- recenable_button_base_id = 0x0,
- solo_button_base_id = 0x08,
- mute_button_base_id = 0x10,
- select_button_base_id = 0x18,
- vselect_button_base_id = 0x20,
- fader_touch_button_base_id = 0xe0,
- };
-
Control (int id, std::string name, Group& group);
virtual ~Control() {}
class Jog : public Pot
{
public:
+ enum base_id_t {
+ base_id = 0x3c
+ };
+
Jog (int id, std::string name, Group & group)
: Pot (id, name, group)
{
class Pot : public Control
{
public:
+ enum base_id_t {
+ base_id = 0x30,
+ };
+
enum Mode {
dot = 0,
boost_cut = 1,
{
Group::add (control);
- if (control.name() == "gain") {
- _gain = reinterpret_cast<Fader*>(&control);
- } else if (control.name() == "vpot") {
- _vpot = reinterpret_cast<Pot*>(&control);
- } else if (control.name() == "recenable") {
- _recenable = reinterpret_cast<Button*>(&control);
- } else if (control.name() == "solo") {
- _solo = reinterpret_cast<Button*>(&control);
- } else if (control.name() == "mute") {
- _mute = reinterpret_cast<Button*>(&control);
- } else if (control.name() == "select") {
- _select = reinterpret_cast<Button*>(&control);
- } else if (control.name() == "vselect") {
- _vselect = reinterpret_cast<Button*>(&control);
- } else if (control.name() == "fader_touch") {
- _fader_touch = reinterpret_cast<Button*>(&control);
- } else if (control.name() == "meter") {
- _meter = reinterpret_cast<Meter*>(&control);
- } else {
- // relax
+ Fader* fader;
+ Pot* pot;
+ Button* button;
+ Meter* meter;
+
+ if ((fader = dynamic_cast<Fader*>(&control)) != 0) {
+
+ _gain = fader;
+
+ } else if ((pot = dynamic_cast<Pot*>(&control)) != 0) {
+
+ _vpot = pot;
+
+ } else if ((button = dynamic_cast<Button*>(&control)) != 0) {
+
+ if (control.raw_id() >= Button::recenable_base_id &&
+ control.raw_id() < Button::recenable_base_id + 8) {
+
+ _recenable = button;
+
+ } else if (control.raw_id() >= Button::mute_base_id &&
+ control.raw_id() < Button::mute_base_id + 8) {
+
+ _mute = button;
+
+ } else if (control.raw_id() >= Button::solo_base_id &&
+ control.raw_id() < Button::solo_base_id + 8) {
+
+ _solo = button;
+
+ } else if (control.raw_id() >= Button::select_base_id &&
+ control.raw_id() < Button::select_base_id + 8) {
+
+ _select = button;
+
+ } else if (control.raw_id() >= Button::vselect_base_id &&
+ control.raw_id() < Button::vselect_base_id + 8) {
+
+ _vselect = button;
+
+ } else if (control.raw_id() >= Button::fader_touch_base_id &&
+ control.raw_id() < Button::fader_touch_base_id + 8) {
+
+ _fader_touch = button;
+ }
+
+ } else if ((meter = dynamic_cast<Meter*>(&control)) != 0) {
+ _meter = meter;
}
}
}
if (bs == press) {
- if (button.raw_id() >= Control::recenable_button_base_id &&
- button.raw_id() < Control::recenable_button_base_id + 8) {
+ if (button.raw_id() >= Button::recenable_base_id &&
+ button.raw_id() < Button::recenable_base_id + 8) {
_route->set_record_enabled (!_route->record_enabled(), this);
- } else if (button.raw_id() >= Control::mute_button_base_id &&
- button.raw_id() < Control::mute_button_base_id + 8) {
+ } else if (button.raw_id() >= Button::mute_base_id &&
+ button.raw_id() < Button::mute_base_id + 8) {
_route->set_mute (!_route->muted(), this);
- } else if (button.raw_id() >= Control::solo_button_base_id &&
- button.raw_id() < Control::solo_button_base_id + 8) {
+ } else if (button.raw_id() >= Button::solo_base_id &&
+ button.raw_id() < Button::solo_base_id + 8) {
_route->set_solo (!_route->soloed(), this);
- } else if (button.raw_id() >= Control::select_button_base_id &&
- button.raw_id() < Control::select_button_base_id + 8) {
+ } else if (button.raw_id() >= Button::select_base_id &&
+ button.raw_id() < Button::select_base_id + 8) {
_surface->mcp().select_track (_route);
- } else if (button.raw_id() >= Control::vselect_button_base_id &&
- button.raw_id() < Control::vselect_button_base_id + 8) {
+ } else if (button.raw_id() >= Button::vselect_base_id &&
+ button.raw_id() < Button::vselect_base_id + 8) {
}
}
- if (button.name() == "fader_touch") {
+ if (button.raw_id() >= Button::fader_touch_base_id &&
+ button.raw_id() < Button::fader_touch_base_id + 8) {
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("fader touch, press ? %1\n", (bs == press)));
static StripControlDefinition mackie_strip_controls[] = {
{ "gain", 0, Fader::factory, },
- { "vpot", Control::pot_base_id, Pot::factory, },
- { "recenable", Control::recenable_button_base_id, Button::factory, },
- { "solo", Control::solo_button_base_id, Button::factory, },
- { "mute", Control::mute_button_base_id, Button::factory, },
- { "select", Control::select_button_base_id, Button::factory, },
- { "vselect", Control::vselect_button_base_id, Button::factory, },
- { "fader_touch", Control::fader_touch_button_base_id, Button::factory, },
+ { "vpot", Pot::base_id, Pot::factory, },
+ { "recenable", Button::recenable_base_id, Button::factory, },
+ { "solo", Button::solo_base_id, Button::factory, },
+ { "mute", Button::mute_base_id, Button::factory, },
+ { "select", Button::select_base_id, Button::factory, },
+ { "vselect", Button::vselect_base_id, Button::factory, },
+ { "fader_touch", Button::fader_touch_base_id, Button::factory, },
{ "meter", 0, Meter::factory, },
{ "", 0, Button::factory, }
};
{
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("SurfacePort::handle_midi_controller %1 = %2\n", ev->controller_number, ev->value));
- Pot* pot = pots[Control::pot_base_id | ev->controller_number];
+ Pot* pot = pots[ev->controller_number];
- if (!pot && ev->controller_number == Control::jog_base_id) {
+ if (!pot && ev->controller_number == Jog::base_id) {
pot = dynamic_cast<Pot*> (controls_by_name["jog"]);
}