You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.2KB

  1. #include "rcm.h"
  2. #include "GVerbWidget.hpp"
  3. #include "../include/BaseWidget.hpp"
  4. namespace rack_plugin_rcm {
  5. struct CVS0to10Module : Module {
  6. enum ParamIds {
  7. AMOUNT_PARAM_A,
  8. AMOUNT_PARAM_B,
  9. AMOUNT_PARAM_C,
  10. AMOUNT_PARAM_D,
  11. NUM_PARAMS
  12. };
  13. enum InputIds {
  14. NUM_INPUTS
  15. };
  16. enum OutputIds {
  17. CV_OUTPUT_A,
  18. CV_OUTPUT_B,
  19. CV_OUTPUT_C,
  20. CV_OUTPUT_D,
  21. NUM_OUTPUTS
  22. };
  23. enum LightIds {
  24. NUM_LIGHTS
  25. };
  26. CVS0to10Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
  27. }
  28. void step() override;
  29. // For more advanced Module features, read Rack's engine.hpp header file
  30. // - toJson, fromJson: serialization of internal data
  31. // - onSampleRateChange: event triggered by a change of sample rate
  32. // - onReset, onRandomize, onCreate, onDelete: implements special behavior when user clicks these from the context menu
  33. };
  34. void CVS0to10Module::step() {
  35. outputs[CV_OUTPUT_A].value = params[AMOUNT_PARAM_A].value;
  36. outputs[CV_OUTPUT_B].value = params[AMOUNT_PARAM_B].value;
  37. outputs[CV_OUTPUT_C].value = params[AMOUNT_PARAM_C].value;
  38. outputs[CV_OUTPUT_D].value = params[AMOUNT_PARAM_D].value;
  39. }
  40. struct CVS0to10ModuleWidget : BaseWidget {
  41. TextField *textField;
  42. CVS0to10ModuleWidget(CVS0to10Module *module) : BaseWidget(module) {
  43. colourHotZone = Rect(Vec(10, 10), Vec(50, 13));
  44. backgroundHue = 0.754;
  45. backgroundSaturation = 1.f;
  46. backgroundLuminosity = 0.58f;
  47. setPanel(SVG::load(assetPlugin(plugin, "res/CVS0to10.svg")));
  48. auto x = 6.f;
  49. addParam(ParamWidget::create<LEDSliderWhite>(Vec(11.5-x, 135), module, CVS0to10Module::AMOUNT_PARAM_A, 0.0, 10.0, 0.0));
  50. addParam(ParamWidget::create<LEDSliderWhite>(Vec(26.0-x, 135), module, CVS0to10Module::AMOUNT_PARAM_B, 0.0, 10.0, 0.0));
  51. addParam(ParamWidget::create<LEDSliderWhite>(Vec(40.5-x, 135), module, CVS0to10Module::AMOUNT_PARAM_C, 0.0, 10.0, 0.0));
  52. addParam(ParamWidget::create<LEDSliderWhite>(Vec(55.0-x, 135), module, CVS0to10Module::AMOUNT_PARAM_D, 0.0, 10.0, 0.0));
  53. addOutput(Port::create<PJ301MPort>(Vec(12.5, 278), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_A));
  54. addOutput(Port::create<PJ301MPort>(Vec(42, 278), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_B));
  55. addOutput(Port::create<PJ301MPort>(Vec(12.5, 317), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_C));
  56. addOutput(Port::create<PJ301MPort>(Vec(42, 317), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_D));
  57. textField = Widget::create<LedDisplayTextField>(Vec(7.5, 38.0));
  58. textField->box.size = Vec(60.0, 80.0);
  59. textField->multiline = true;
  60. ((LedDisplayTextField*)textField)->color = COLOR_WHITE;
  61. addChild(textField);
  62. }
  63. json_t *toJson() override {
  64. json_t *rootJ = BaseWidget::toJson();
  65. // text
  66. json_object_set_new(rootJ, "text", json_string(textField->text.c_str()));
  67. return rootJ;
  68. }
  69. void fromJson(json_t *rootJ) override {
  70. BaseWidget::fromJson(rootJ);
  71. // text
  72. json_t *textJ = json_object_get(rootJ, "text");
  73. if (textJ)
  74. textField->text = json_string_value(textJ);
  75. }
  76. };
  77. } // namespace rack_plugin_rcm
  78. using namespace rack_plugin_rcm;
  79. RACK_PLUGIN_MODEL_INIT(rcm, CVS0to10Module) {
  80. Model *modelCVS0to10Module = Model::create<CVS0to10Module, CVS0to10ModuleWidget>("rcm", "rcm-CVS0to10", "CVS0to10", ENVELOPE_FOLLOWER_TAG);
  81. return modelCVS0to10Module;
  82. }