|
- #pragma once
- #ifdef LAUNCHPAD
- #include "communicator.hpp"
- #include "launchpad.hpp"
-
- // off on switch, single key
- struct LaunchpadSwitch : launchpadControl
- {
- public:
- LaunchpadSwitch(int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor, bool shifted = false)
- : LaunchpadSwitch(0, page, key, offColor, onColor, shifted) {}
-
- LaunchpadSwitch(int lp, int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor, bool shifted = false) : launchpadControl(lp, page, key, shifted)
- {
- m_offColor = offColor;
- m_onColor = onColor;
- }
-
- protected:
- virtual void draw(launchpadDriver *drv) override { drv->drive_led(m_lpNumber, m_key, getValue() > 0.0 ? m_onColor : m_offColor); }
- virtual bool intersect(LaunchpadKey key) override { return key == m_key; }
- virtual void onLaunchpadKey(Module *pModule, LaunchpadMessage msg) override { if(msg.status == LaunchpadKeyStatus::keyDown) setValue(pModule, getValue() < 1); }
-
- private:
- LaunchpadLed m_offColor;
- LaunchpadLed m_onColor;
- };
-
- // 3-state switch, single key
- struct LaunchpadThree : launchpadControl
- {
- public:
- LaunchpadThree(int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor1, LaunchpadLed onColor2, bool shifted = false)
- : LaunchpadThree(0, page, key, offColor, onColor1, onColor2, shifted) {}
-
- LaunchpadThree(int lp, int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor1, LaunchpadLed onColor2, bool shifted = false) : launchpadControl(lp, page, key, shifted)
- {
- m_colors[0] = offColor;
- m_colors[1] = onColor1;
- m_colors[2] = onColor2;
- }
-
- protected:
- virtual void draw(launchpadDriver *drv) override
- {
- int n = (int)roundf(getValue());
- if(n > 2)
- n = 2;
- else if(n < 0)
- n = 0;
- drv->drive_led(m_lpNumber, m_key, m_colors[n]);
- }
- virtual bool intersect(LaunchpadKey key) override { return key == m_key; }
- virtual void onLaunchpadKey(Module *pModule, LaunchpadMessage msg) override
- {
- if(msg.status == LaunchpadKeyStatus::keyDown)
- {
- int n = (int)roundf(getValue()) + 1;
- if(n > 2)
- n = 0;
- setValue(pModule, n);
- }
- }
-
- private:
- LaunchpadLed m_colors[3];
- };
-
- struct LaunchpadMomentary : launchpadControl
- {
- public:
- LaunchpadMomentary(int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor, bool shifted = false)
- : LaunchpadMomentary(0, page, key, offColor, onColor, shifted) {}
-
- LaunchpadMomentary(int lp, int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor, bool shifted = false)
- : launchpadControl(lp, page, key, shifted)
- {
- m_offColor = offColor;
- m_onColor = onColor;
- }
-
- protected:
- virtual void draw(launchpadDriver *drv) override { drv->drive_led(m_lpNumber, m_key, getValue() > 0.0 ? m_onColor : m_offColor); }
- virtual bool intersect(LaunchpadKey key) override
- {
- return key == m_key;
- }
- virtual void onLaunchpadKey(Module *pModule, LaunchpadMessage msg) override
- {
- setValue(pModule, msg.status == LaunchpadKeyStatus::keyDown ? 1.0 : 0.0);
- }
-
- private:
- LaunchpadLed m_offColor;
- LaunchpadLed m_onColor;
- };
-
- struct LaunchpadKnob : launchpadControl
- {
- public:
- LaunchpadKnob(int page, LaunchpadKey key, LaunchpadLed rgbMin, LaunchpadLed rgbMax, bool horizontal = false, bool shifted = false) :
- LaunchpadKnob(0, page, key, rgbMin, rgbMax, horizontal, shifted) {}
-
- LaunchpadKnob(int lp, int page, LaunchpadKey key, LaunchpadLed rgbMin, LaunchpadLed rgbMax, bool horizontal = false, bool shifted = false) : launchpadControl(lp, page, key, shifted)
- {
- m_offColor = rgbMin;
- m_onColor = rgbMax;
- int r, c;
- ILaunchpadPro::Key2RC(m_key, &r, &c);
- if(horizontal)
- m_secondKey = ILaunchpadPro::RC2Key(r, c + 1);
- else
- m_secondKey = ILaunchpadPro::RC2Key(r + 1, c);
- }
-
- protected:
- virtual void draw(launchpadDriver *drv) override
- {
- float v = getValue();
- float inv_v = pBindedParam->maxValue - v + pBindedParam->minValue;
- LaunchpadLed led;
- led.status = ButtonColorType::RGB;
- led.r_color = (int)roundf(rescale(v, pBindedParam->minValue, pBindedParam->maxValue, m_offColor.r_color, m_onColor.r_color));
- led.g = (int)roundf(rescale(v, pBindedParam->minValue, pBindedParam->maxValue, m_offColor.g, m_onColor.g));
- led.b = (int)roundf(rescale(v, pBindedParam->minValue, pBindedParam->maxValue, m_offColor.b, m_onColor.b));
- drv->drive_led(m_lpNumber, m_key, led);
-
- led.r_color = (int)roundf(rescale(inv_v, pBindedParam->minValue, pBindedParam->maxValue, m_offColor.r_color, m_onColor.r_color));
- led.g = (int)roundf(rescale(inv_v, pBindedParam->minValue, pBindedParam->maxValue, m_offColor.g, m_onColor.g));
- led.b = (int)roundf(rescale(inv_v, pBindedParam->minValue, pBindedParam->maxValue, m_offColor.b, m_onColor.b));
- drv->drive_led(m_lpNumber, m_secondKey, led);
- }
- virtual bool intersect(LaunchpadKey key) override { return key == m_key || key == m_secondKey; }
- virtual void onLaunchpadKey(Module *pModule, LaunchpadMessage msg) override
- {
- switch(msg.status)
- {
- default:
- break;
- case LaunchpadKeyStatus::keyChannelPressure:
- case LaunchpadKeyStatus::keyPressure:
- float delta = sensitivity * (pBindedParam->maxValue - pBindedParam->minValue);
- if(msg.param0 < 100)
- delta /= 16.0;
-
- float v = pBindedParam->value;
- if(msg.key == m_key)
- v += delta;
- else
- v -= delta;
-
- setValue(pModule, v);
- break;
- }
- }
-
- private:
- const float sensitivity = 0.015;
- LaunchpadKey m_secondKey;
- LaunchpadLed m_offColor;
- LaunchpadLed m_onColor;
- };
-
- struct LaunchpadLight : launchpadControl
- {
- public:
- LaunchpadLight(int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor)
- : LaunchpadLight(0, page, key, offColor, onColor) {}
-
- LaunchpadLight(int lp, int page, LaunchpadKey key, LaunchpadLed offColor, LaunchpadLed onColor) : launchpadControl(lp, page, key, false)
- {
- m_offColor = offColor;
- m_onColor = onColor;
- }
-
- protected:
- virtual void draw(launchpadDriver *drv) override {
- float newValue = getValue();
- drv->drive_led(m_lpNumber, m_key, newValue > 0.0 ? m_onColor : m_offColor);
- }
- virtual void onLaunchpadKey(Module *pModule, LaunchpadMessage msg) override {}
-
- private:
- LaunchpadLed m_offColor;
- LaunchpadLed m_onColor;
- };
-
- // Radiobutton switch, multiple keys, horizontal or vertical
- struct LaunchpadRadio : launchpadControl
- {
- public:
- LaunchpadRadio(int page, LaunchpadKey firstKey, int numKeys, LaunchpadLed unselectedColor, LaunchpadLed selectedColor, bool horizontal = false, bool shifted = false)
- : LaunchpadRadio(0, page, firstKey, numKeys, unselectedColor, selectedColor, horizontal, shifted) {}
-
- LaunchpadRadio(int lp, int page, LaunchpadKey firstKey, int numKeys, LaunchpadLed unselectedColor, LaunchpadLed selectedColor, bool horizontal = false, bool shifted = false)
- : launchpadControl(lp, page, firstKey, shifted)
- {
- m_numKeys = numKeys;
- m_unselectedColor = unselectedColor;
- m_selectedColor = selectedColor;
- m_horizontal = horizontal;
- }
-
- virtual void onLaunchpadKey(Module *pModule, LaunchpadMessage msg) override
- {
- if(msg.status == LaunchpadKeyStatus::keyDown)
- {
- int r, c, ir, ic;
- if(ILaunchpadPro::Key2RC(m_key, &r, &c) && ILaunchpadPro::Key2RC(msg.key, &ir, &ic))
- {
- int v = m_horizontal ? ic - c : (m_numKeys - 1) - (ir - r);
- setValue(pModule, v);
- }
- }
- }
-
- protected:
- virtual bool intersect(LaunchpadKey key) override
- {
- int r, c, ir, ic;
- if(ILaunchpadPro::Key2RC(m_key, &r, &c) && ILaunchpadPro::Key2RC(key, &ir, &ic))
- {
- if(m_horizontal)
- return ir == r && ic >= c && ic <= c + m_numKeys;
- else
- return ic == c && ir >= r && ir <= r + m_numKeys;
- }
-
- return false;
- }
-
- virtual void draw(launchpadDriver *drv) override
- {
- int r, c;
- if(ILaunchpadPro::Key2RC(m_key, &r, &c))
- {
- int n = (int)roundf(getValue());
- for(int k = 0; k < m_numKeys; k++)
- {
- if(m_horizontal)
- {
- drv->drive_led(m_lpNumber, ILaunchpadPro::RC2Key(r, c), k == n ? m_selectedColor : m_unselectedColor);
- c++;
- } else
- {
- drv->drive_led(m_lpNumber, ILaunchpadPro::RC2Key(r, c), m_numKeys - 1 - k == n ? m_selectedColor : m_unselectedColor);
- r++;
- }
- }
- }
- }
-
- private:
- LaunchpadLed m_unselectedColor;
- LaunchpadLed m_selectedColor;
- int m_numKeys;
- bool m_horizontal;
- };
- #endif
|