#include "rcm.h" #include "GVerbWidget.hpp" #include "../include/BaseWidget.hpp" namespace rack_plugin_rcm { struct CVS0to10Module : Module { enum ParamIds { AMOUNT_PARAM_A, AMOUNT_PARAM_B, AMOUNT_PARAM_C, AMOUNT_PARAM_D, NUM_PARAMS }; enum InputIds { NUM_INPUTS }; enum OutputIds { CV_OUTPUT_A, CV_OUTPUT_B, CV_OUTPUT_C, CV_OUTPUT_D, NUM_OUTPUTS }; enum LightIds { NUM_LIGHTS }; CVS0to10Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { } void step() override; // For more advanced Module features, read Rack's engine.hpp header file // - toJson, fromJson: serialization of internal data // - onSampleRateChange: event triggered by a change of sample rate // - onReset, onRandomize, onCreate, onDelete: implements special behavior when user clicks these from the context menu }; void CVS0to10Module::step() { outputs[CV_OUTPUT_A].value = params[AMOUNT_PARAM_A].value; outputs[CV_OUTPUT_B].value = params[AMOUNT_PARAM_B].value; outputs[CV_OUTPUT_C].value = params[AMOUNT_PARAM_C].value; outputs[CV_OUTPUT_D].value = params[AMOUNT_PARAM_D].value; } struct CVS0to10ModuleWidget : BaseWidget { TextField *textField; CVS0to10ModuleWidget(CVS0to10Module *module) : BaseWidget(module) { colourHotZone = Rect(Vec(10, 10), Vec(50, 13)); backgroundHue = 0.754; backgroundSaturation = 1.f; backgroundLuminosity = 0.58f; setPanel(SVG::load(assetPlugin(plugin, "res/CVS0to10.svg"))); auto x = 6.f; addParam(ParamWidget::create(Vec(11.5-x, 135), module, CVS0to10Module::AMOUNT_PARAM_A, 0.0, 10.0, 0.0)); addParam(ParamWidget::create(Vec(26.0-x, 135), module, CVS0to10Module::AMOUNT_PARAM_B, 0.0, 10.0, 0.0)); addParam(ParamWidget::create(Vec(40.5-x, 135), module, CVS0to10Module::AMOUNT_PARAM_C, 0.0, 10.0, 0.0)); addParam(ParamWidget::create(Vec(55.0-x, 135), module, CVS0to10Module::AMOUNT_PARAM_D, 0.0, 10.0, 0.0)); addOutput(Port::create(Vec(12.5, 278), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_A)); addOutput(Port::create(Vec(42, 278), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_B)); addOutput(Port::create(Vec(12.5, 317), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_C)); addOutput(Port::create(Vec(42, 317), Port::OUTPUT, module, CVS0to10Module::CV_OUTPUT_D)); textField = Widget::create(Vec(7.5, 38.0)); textField->box.size = Vec(60.0, 80.0); textField->multiline = true; ((LedDisplayTextField*)textField)->color = COLOR_WHITE; addChild(textField); } json_t *toJson() override { json_t *rootJ = BaseWidget::toJson(); // text json_object_set_new(rootJ, "text", json_string(textField->text.c_str())); return rootJ; } void fromJson(json_t *rootJ) override { BaseWidget::fromJson(rootJ); // text json_t *textJ = json_object_get(rootJ, "text"); if (textJ) textField->text = json_string_value(textJ); } }; } // namespace rack_plugin_rcm using namespace rack_plugin_rcm; RACK_PLUGIN_MODEL_INIT(rcm, CVS0to10Module) { Model *modelCVS0to10Module = Model::create("rcm", "rcm-CVS0to10", "CVS0to10", ENVELOPE_FOLLOWER_TAG); return modelCVS0to10Module; }