Browse Source

Use menu item helpers for Core modules.

tags/v2.0.0
Andrew Belt 3 years ago
parent
commit
b998904d16
8 changed files with 52 additions and 221 deletions
  1. +1
    -1
      include/helpers.hpp
  2. +5
    -24
      src/core/AudioInterface.cpp
  3. +6
    -24
      src/core/CV_Gate.cpp
  4. +3
    -4
      src/core/CV_MIDI.cpp
  5. +5
    -35
      src/core/MIDI_CC.cpp
  6. +23
    -89
      src/core/MIDI_CV.cpp
  7. +8
    -32
      src/core/MIDI_Gate.cpp
  8. +1
    -12
      src/core/MIDI_Map.cpp

+ 1
- 1
include/helpers.hpp View File

@@ -300,7 +300,7 @@ template <typename T>
ui::MenuItem* createIndexPtrSubmenuItem(std::string text, std::vector<std::string> labels, T* ptr) {
return createIndexSubmenuItem(text, labels,
[=]() {return *ptr;},
[=](T index) {*ptr = index;}
[=](size_t index) {*ptr = T(index);}
);
}



+ 5
- 24
src/core/AudioInterface.cpp View File

@@ -560,31 +560,12 @@ struct AudioInterfaceWidget : ModuleWidget {

menu->addChild(new MenuSeparator);

struct PrimaryModuleItem : MenuItem {
TAudioInterface* module;
void onAction(const ActionEvent& e) override {
module->setPrimary();
}
};

PrimaryModuleItem* primaryModuleItem = new PrimaryModuleItem;
primaryModuleItem->text = "Primary audio module";
primaryModuleItem->rightText = CHECKMARK(module->isPrimary());
primaryModuleItem->module = module;
menu->addChild(primaryModuleItem);

struct DCFilterItem : MenuItem {
TAudioInterface* module;
void onAction(const ActionEvent& e) override {
module->dcFilterEnabled ^= true;
}
};
menu->addChild(createCheckMenuItem("Primary audio module",
[=]() {return module->isPrimary();},
[=]() {module->setPrimary();}
));

DCFilterItem* dcFilterItem = new DCFilterItem;
dcFilterItem->text = "DC blocker";
dcFilterItem->rightText = CHECKMARK(module->dcFilterEnabled);
dcFilterItem->module = module;
menu->addChild(dcFilterItem);
menu->addChild(createBoolPtrMenuItem("DC blocker", &module->dcFilterEnabled));
}
};



+ 6
- 24
src/core/CV_Gate.cpp View File

@@ -162,22 +162,6 @@ struct CV_Gate : Module {
};


struct CV_GateVelocityItem : MenuItem {
CV_Gate* module;
void onAction(const ActionEvent& e) override {
module->velocityMode ^= true;
}
};


struct CV_GatePanicItem : MenuItem {
CV_Gate* module;
void onAction(const ActionEvent& e) override {
module->midiOutput.panic();
}
};


struct CV_GateWidget : ModuleWidget {
CV_GateWidget(CV_Gate* module) {
setModule(module);
@@ -217,14 +201,12 @@ struct CV_GateWidget : ModuleWidget {
CV_Gate* module = dynamic_cast<CV_Gate*>(this->module);

menu->addChild(new MenuSeparator);
CV_GateVelocityItem* velocityItem = createMenuItem<CV_GateVelocityItem>("Velocity mode", CHECKMARK(module->velocityMode));
velocityItem->module = module;
menu->addChild(velocityItem);

CV_GatePanicItem* panicItem = new CV_GatePanicItem;
panicItem->text = "Panic";
panicItem->module = module;
menu->addChild(panicItem);

menu->addChild(createBoolPtrMenuItem("Velocity mode", &module->velocityMode));

menu->addChild(createMenuItem("Panic", "",
[=]() {module->midiOutput.panic();}
));
}
};



+ 3
- 4
src/core/CV_MIDI.cpp View File

@@ -180,10 +180,9 @@ struct CV_MIDIWidget : ModuleWidget {

menu->addChild(new MenuSeparator);

CV_MIDIPanicItem* panicItem = new CV_MIDIPanicItem;
panicItem->text = "Panic";
panicItem->module = module;
menu->addChild(panicItem);
menu->addChild(createMenuItem("Panic", "",
[=]() {module->midiOutput.panic();}
));
}
};



+ 5
- 35
src/core/MIDI_CC.cpp View File

@@ -255,41 +255,11 @@ struct MIDI_CCWidget : ModuleWidget {

menu->addChild(new MenuSeparator);

struct SmoothItem : MenuItem {
MIDI_CC* module;
void onAction(const ActionEvent& e) override {
module->smooth ^= true;
}
};
SmoothItem* smoothItem = new SmoothItem;
smoothItem->text = "Smooth CC";
smoothItem->rightText = CHECKMARK(module->smooth);
smoothItem->module = module;
menu->addChild(smoothItem);

struct MpeModeItem : MenuItem {
MIDI_CC* module;
void onAction(const ActionEvent& e) override {
module->mpeMode ^= true;
}
};
MpeModeItem* mpeModeItem = new MpeModeItem;
mpeModeItem->text = "MPE mode";
mpeModeItem->rightText = CHECKMARK(module->mpeMode);
mpeModeItem->module = module;
menu->addChild(mpeModeItem);

struct LsbModeItem : MenuItem {
MIDI_CC* module;
void onAction(const ActionEvent& e) override {
module->lsbMode ^= true;
}
};
LsbModeItem* lsbItem = new LsbModeItem;
lsbItem->text = "CC 0-31 controls are 14-bit";
lsbItem->rightText = CHECKMARK(module->lsbMode);
lsbItem->module = module;
menu->addChild(lsbItem);
menu->addChild(createBoolPtrMenuItem("Smooth CC", &module->smooth));

menu->addChild(createBoolPtrMenuItem("MPE mode", &module->mpeMode));

menu->addChild(createBoolPtrMenuItem("CC 0-31 controls are 14-bit", &module->lsbMode));
}
};



+ 23
- 89
src/core/MIDI_CV.cpp View File

@@ -505,38 +505,19 @@ struct MIDI_CVWidget : ModuleWidget {

menu->addChild(new MenuSeparator);

struct SmoothItem : MenuItem {
MIDI_CV* module;
void onAction(const ActionEvent& e) override {
module->smooth ^= true;
}
};
SmoothItem* smoothItem = new SmoothItem;
smoothItem->text = "Smooth pitch/mod wheel";
smoothItem->rightText = CHECKMARK(module->smooth);
smoothItem->module = module;
menu->addChild(smoothItem);
menu->addChild(createBoolPtrMenuItem("Smooth pitch/mod wheel", &module->smooth));

struct ClockDivisionValueItem : MenuItem {
MIDI_CV* module;
int clockDivision;
void onAction(const ActionEvent& e) override {
module->clockDivision = clockDivision;
}
};
static const std::vector<int> clockDivisions = {24 * 4, 24 * 2, 24, 24 / 2, 24 / 4, 24 / 8, 2, 1};
static const std::vector<std::string> clockDivisionLabels = {"Whole", "Half", "Quarter", "8th", "16th", "32nd", "12 PPQN", "24 PPQN"};
struct ClockDivisionItem : MenuItem {
MIDI_CV* module;
Menu* createChildMenu() override {
Menu* menu = new Menu;
std::vector<int> divisions = {24 * 4, 24 * 2, 24, 24 / 2, 24 / 4, 24 / 8, 2, 1};
std::vector<std::string> divisionNames = {"Whole", "Half", "Quarter", "8th", "16th", "32nd", "12 PPQN", "24 PPQN"};
for (size_t i = 0; i < divisions.size(); i++) {
ClockDivisionValueItem* item = new ClockDivisionValueItem;
item->text = divisionNames[i];
item->rightText = CHECKMARK(module->clockDivision == divisions[i]);
item->module = module;
item->clockDivision = divisions[i];
menu->addChild(item);
for (size_t i = 0; i < clockDivisions.size(); i++) {
menu->addChild(createCheckMenuItem(clockDivisionLabels[i],
[=]() {return module->clockDivision == clockDivisions[i];},
[=]() {module->clockDivision = clockDivisions[i];}
));
}
return menu;
}
@@ -547,82 +528,35 @@ struct MIDI_CVWidget : ModuleWidget {
clockDivisionItem->module = module;
menu->addChild(clockDivisionItem);

struct ChannelValueItem : MenuItem {
MIDI_CV* module;
int channels;
void onAction(const ActionEvent& e) override {
module->setChannels(channels);
}
};
struct ChannelItem : MenuItem {
MIDI_CV* module;
Menu* createChildMenu() override {
Menu* menu = new Menu;
for (int channels = 1; channels <= 16; channels++) {
ChannelValueItem* item = new ChannelValueItem;
if (channels == 1)
item->text = "Monophonic";
else
item->text = string::f("%d", channels);
item->rightText = CHECKMARK(module->channels == channels);
item->module = module;
item->channels = channels;
menu->addChild(item);
for (int c = 1; c <= 16; c++) {
menu->addChild(createCheckMenuItem((c == 1) ? "Monophonic" : string::f("%d", c),
[=]() {return module->channels == c;},
[=]() {module->setChannels(c);}
));
}
return menu;
}
};
ChannelItem* channelItem = new ChannelItem;
channelItem->text = "Polyphony channels";
channelItem->rightText = string::f("%d", module->channels) + " " + RIGHT_ARROW;
channelItem->rightText = string::f("%d", module->channels) + " " + RIGHT_ARROW;
channelItem->module = module;
menu->addChild(channelItem);

struct PolyModeValueItem : MenuItem {
MIDI_CV* module;
MIDI_CV::PolyMode polyMode;
void onAction(const ActionEvent& e) override {
module->setPolyMode(polyMode);
}
};
struct PolyModeItem : MenuItem {
MIDI_CV* module;
Menu* createChildMenu() override {
Menu* menu = new Menu;
std::vector<std::string> polyModeNames = {
"Rotate",
"Reuse",
"Reset",
"MPE",
};
for (int i = 0; i < MIDI_CV::NUM_POLY_MODES; i++) {
MIDI_CV::PolyMode polyMode = (MIDI_CV::PolyMode) i;
PolyModeValueItem* item = new PolyModeValueItem;
item->text = polyModeNames[i];
item->rightText = CHECKMARK(module->polyMode == polyMode);
item->module = module;
item->polyMode = polyMode;
menu->addChild(item);
}
return menu;
}
};
PolyModeItem* polyModeItem = new PolyModeItem;
polyModeItem->text = "Polyphony mode";
polyModeItem->rightText = RIGHT_ARROW;
polyModeItem->module = module;
menu->addChild(polyModeItem);
menu->addChild(createIndexPtrSubmenuItem("Polyphony mode", {
"Rotate",
"Reuse",
"Reset",
"MPE",
}, &module->polyMode));

struct PanicItem : MenuItem {
MIDI_CV* module;
void onAction(const ActionEvent& e) override {
module->panic();
}
};
PanicItem* panicItem = new PanicItem;
panicItem->text = "Panic";
panicItem->module = module;
menu->addChild(panicItem);
menu->addChild(createMenuItem("Panic", "",
[=]() {module->panic();}
));

// Example of using appendMidiMenu()
// menu->addChild(new MenuSeparator);


+ 8
- 32
src/core/MIDI_Gate.cpp View File

@@ -221,39 +221,15 @@ struct MIDI_GateWidget : ModuleWidget {
void appendContextMenu(Menu* menu) override {
MIDI_Gate* module = dynamic_cast<MIDI_Gate*>(this->module);

struct VelocityItem : MenuItem {
MIDI_Gate* module;
void onAction(const ActionEvent& e) override {
module->velocityMode ^= true;
}
};
menu->addChild(new MenuSeparator);
VelocityItem* velocityItem = createMenuItem<VelocityItem>("Velocity mode", CHECKMARK(module->velocityMode));
velocityItem->module = module;
menu->addChild(velocityItem);

struct MpeModeItem : MenuItem {
MIDI_Gate* module;
void onAction(const ActionEvent& e) override {
module->mpeMode ^= true;
}
};
MpeModeItem* mpeModeItem = new MpeModeItem;
mpeModeItem->text = "MPE mode";
mpeModeItem->rightText = CHECKMARK(module->mpeMode);
mpeModeItem->module = module;
menu->addChild(mpeModeItem);

struct PanicItem : MenuItem {
MIDI_Gate* module;
void onAction(const ActionEvent& e) override {
module->panic();
}
};
PanicItem* panicItem = new PanicItem;
panicItem->text = "Panic";
panicItem->module = module;
menu->addChild(panicItem);

menu->addChild(createBoolPtrMenuItem("Velocity mode", &module->velocityMode));

menu->addChild(createBoolPtrMenuItem("MPE mode", &module->mpeMode));

menu->addChild(createMenuItem("Panic", "",
[=]() {module->panic();}
));
}
};



+ 1
- 12
src/core/MIDI_Map.cpp View File

@@ -496,18 +496,7 @@ struct MIDI_MapWidget : ModuleWidget {

menu->addChild(new MenuSeparator);

struct SmoothItem : MenuItem {
MIDI_Map* module;
void onAction(const ActionEvent& e) override {
module->smooth ^= true;
}
};

SmoothItem* smoothItem = new SmoothItem;
smoothItem->text = "Smooth CC";
smoothItem->rightText = CHECKMARK(module->smooth);
smoothItem->module = module;
menu->addChild(smoothItem);
menu->addChild(createBoolPtrMenuItem("Smooth CC", &module->smooth));
}
};



Loading…
Cancel
Save