Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
262 changes: 146 additions & 116 deletions libs/surfaces/console1/c1_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,66 +4,146 @@
#include "ardour/debug.h"
#include "console1.h"

namespace ArdourSurface {
namespace Console1
{

using ControllerID = Console1::ControllerID;

class Controller
{
public:
enum ControllerType
{
CONTROLLER,
CONTROLLER_BUTTON,
MULTISTATE_BUTTON,
ENCODER,
METER
};
public:

Controller (Console1* console1, ControllerID id)
: console1 (console1)
, _id (id)
: console1 (console1)
, _id (id)
{
}

Controller (Console1* console1,
ControllerID id,
std::function<void (uint32_t)> action,
std::function<void (uint32_t)> shift_action = 0,
std::function<void (uint32_t)> plugin_action = 0,
std::function<void (uint32_t)> plugin_shift_action = 0)
: console1 (console1)
, _id (id)
, action (action)
, shift_action (shift_action)
, plugin_action (plugin_action)
, plugin_shift_action (plugin_shift_action)
{
}

virtual ~Controller ()
{
}

Console1* console1;
ControllerID id () const
{
return _id;
}

virtual void clear_value() {}

virtual ControllerType get_type ()
{
return CONTROLLER;
}

void set_action (std::function<void (uint32_t)> new_action)
{
action = new_action;
}

virtual ~Controller () {}
void set_plugin_action (std::function<void (uint32_t)> new_action)
{
plugin_action = new_action;
}

void set_plugin_shift_action (std::function<void (uint32_t)> new_action)
{
plugin_shift_action = new_action;
}
std::function<void (uint32_t)> get_action (){
return action;
}
std::function<void (uint32_t)> get_shift_action ()
{
return shift_action;
}

std::function<void (uint32_t)> get_plugin_action ()
{
return plugin_action;
}

std::function<void (uint32_t)> get_plugin_shift_action ()
{
return plugin_shift_action;
}

protected:
ControllerID _id;
std::function<void (uint32_t)> action;
std::function<void (uint32_t)> shift_action;
std::function<void (uint32_t)> plugin_action;
std::function<void (uint32_t)> plugin_shift_action;
};

class Encoder : public Controller
{
public:
Encoder (Console1* console1,
ControllerID id,
std::function<void (uint32_t)> action,
std::function<void (uint32_t)> shift_action = 0,
std::function<void (uint32_t)> plugin_action = 0,
std::function<void (uint32_t)> plugin_shift_action = 0)
: Controller (console1, id, action, shift_action, plugin_action, plugin_shift_action)
{
console1->controllerMap.insert (std::make_pair (id, this));
}

ControllerType get_type ()
{
return ENCODER;
}

Console1* console1;
ControllerID id () const { return _id; }
virtual void set_value (uint32_t value)
{
MIDI::byte buf[3];
buf[0] = 0xB0;
buf[1] = _id;
buf[2] = value;

virtual ControllerType get_type () { return CONTROLLER; }
console1->write (buf, 3);
}

protected:
ControllerID _id;
PBD::Signal<void (uint32_t)>* plugin_signal;
};

class ControllerButton : public Controller
{
public:
ControllerButton (Console1* console1,
ControllerID id,
public:
ControllerButton (Console1* console1,
ControllerID id,
std::function<void (uint32_t)> action,
std::function<void (uint32_t)> shift_action = 0,
std::function<void (uint32_t)> plugin_action = 0,
std::function<void (uint32_t)> plugin_shift_action = 0 )
: Controller (console1, id)
, action (action)
, shift_action (shift_action)
, plugin_action (plugin_action)
, plugin_shift_action (plugin_shift_action)
std::function<void (uint32_t)> shift_action = 0,
std::function<void (uint32_t)> plugin_action = 0,
std::function<void (uint32_t)> plugin_shift_action = 0)
: Controller (console1, id, action, shift_action, plugin_action, plugin_shift_action)
{
console1->buttons.insert (std::make_pair (id, this));
console1->controllerMap.insert (std::make_pair (id, this));
}

ControllerType get_type () { return CONTROLLER_BUTTON; }

void set_action (std::function<void (uint32_t)> new_action) { action = new_action; }
void set_plugin_action (std::function<void (uint32_t)> new_action) { plugin_action = new_action; }
void set_plugin_shift_action (std::function<void (uint32_t)> new_action) { plugin_shift_action = new_action; }
ControllerType get_type ()
{
return CONTROLLER_BUTTON;
}

virtual void set_led_state (bool onoff)
{
// DEBUG_TRACE(DEBUG::Console1, "ControllerButton::set_led_state ...\n");
MIDI::byte buf[3];
buf[0] = 0xB0;
buf[1] = _id;
Expand All @@ -74,42 +154,35 @@ class ControllerButton : public Controller

virtual void set_led_value (uint32_t val)
{
// DEBUG_TRACE(DEBUG::Console1, "ControllerButton::set_led_state ...\n");
MIDI::byte buf[3];
buf[0] = 0xB0;
buf[1] = _id;
buf[2] = val;

console1->write (buf, 3);
}
std::function<void (uint32_t)> action;
std::function<void (uint32_t)> shift_action;
std::function<void (uint32_t)> plugin_action;
std::function<void (uint32_t)> plugin_shift_action;
};

class MultiStateButton : public Controller
{
public:
MultiStateButton (Console1* console1,
ControllerID id,
std::vector<uint32_t> state_values,
public:
MultiStateButton (Console1* console1,
ControllerID id,
std::vector<uint32_t> state_values,
std::function<void (uint32_t)> action,
std::function<void (uint32_t)> shift_action = 0,
std::function<void (uint32_t)> plugin_action = 0,
std::function<void (uint32_t)> plugin_shift_action = 0
)
: Controller (console1, id)
, action (action)
, shift_action (shift_action)
, plugin_action (action)
, plugin_shift_action (shift_action)
, state_values (state_values)
std::function<void (uint32_t)> shift_action = 0,
std::function<void (uint32_t)> plugin_action = 0,
std::function<void (uint32_t)> plugin_shift_action = 0)
: Controller (console1, id, action, shift_action, plugin_action, plugin_shift_action)
, state_values (state_values)
{
console1->multi_buttons.insert (std::make_pair (id, this));
console1->controllerMap.insert (std::make_pair (id, this));
}

ControllerType get_type () { return MULTISTATE_BUTTON; }
ControllerType get_type ()
{
return MULTISTATE_BUTTON;
}

virtual void set_led_state (uint32_t state)
{
Expand All @@ -123,36 +196,33 @@ class MultiStateButton : public Controller
console1->write (buf, 3);
}

void set_action (std::function<void (uint32_t)> new_action) { action = new_action; }
void set_plugin_action (std::function<void (uint32_t)> new_action) { plugin_action = new_action; }
void set_plugin_shift_action (std::function<void (uint32_t)> new_action) { plugin_shift_action = new_action; }

uint32_t state_count () { return state_values.size (); }

std::function<void (uint32_t)> action;
std::function<void (uint32_t)> shift_action;
std::function<void (uint32_t)> plugin_action;
std::function<void (uint32_t)> plugin_shift_action;
uint32_t state_count ()
{
return state_values.size ();
}

private:
private:
std::vector<uint32_t> state_values;
};

class Meter : public Controller
{
public:
Meter (Console1* console1,
ControllerID id,
public:
Meter (Console1* console1,
ControllerID id,
std::function<void ()> action,
std::function<void ()> shift_action = 0)
: Controller (console1, id)
, action (action)
, shift_action (shift_action)
: Controller (console1, id)
, action (action)
, shift_action (shift_action)
{
console1->meters.insert (std::make_pair (id, this));
}

ControllerType get_type () { return METER; }
ControllerType get_type ()
{
return METER;
}

virtual void set_value (uint32_t value)
{
Expand All @@ -167,46 +237,6 @@ class Meter : public Controller
std::function<void ()> shift_action;
};

class Encoder : public Controller
{
public:
Encoder (Console1* console1,
ControllerID id,
std::function<void (uint32_t)> action,
std::function<void (uint32_t)> shift_action = 0,
std::function<void (uint32_t)> plugin_action = 0,
std::function<void (uint32_t)> plugin_shift_action = 0)
: Controller (console1, id)
, action (action)
, shift_action (shift_action)
, plugin_action (plugin_action)
, plugin_shift_action (plugin_action)
{
console1->encoders.insert (std::make_pair (id, this));
}

ControllerType get_type () { return ENCODER; }

void set_action (std::function<void (uint32_t)> new_action) { action = new_action; }
void set_plugin_action (std::function<void (uint32_t)> new_action) { plugin_action = new_action; }
void set_plugin_shift_action (std::function<void (uint32_t)> new_action) { plugin_shift_action = new_action; }

virtual void set_value (uint32_t value)
{
MIDI::byte buf[3];
buf[0] = 0xB0;
buf[1] = _id;
buf[2] = value;

console1->write (buf, 3);
}
std::function<void (uint32_t)> action;
std::function<void (uint32_t val)> shift_action;
std::function<void (uint32_t val)> plugin_action;
std::function<void (uint32_t val)> plugin_shift_action;

PBD::Signal<void(uint32_t)>* plugin_signal;
};
} // namespace Console1

}
#endif // ardour_surface_console1_button_h
Loading