| @@ -0,0 +1,129 @@ | |||
| #include "plugin.hpp" | |||
| #include "engine.hpp" | |||
| #include "app.hpp" | |||
| namespace rack { | |||
| template <class TModuleWidget, typename... Tags> | |||
| Model *createModel(std::string author, std::string slug, std::string name, Tags... tags) { | |||
| struct TModel : Model { | |||
| Module *createModule() override { | |||
| TModule *module = new TModule(); | |||
| return module; | |||
| } | |||
| ModuleWidget *createModuleWidget() override { | |||
| TModuleWidget *moduleWidget = new TModuleWidget(createModule()); | |||
| moduleWidget->model = this; | |||
| return moduleWidget; | |||
| } | |||
| ModuleWidget *createModuleWidgetNull() override { | |||
| TModuleWidget *moduleWidget = new TModuleWidget(NULL); | |||
| moduleWidget->model = this; | |||
| return moduleWidget; | |||
| } | |||
| }; | |||
| Model *model = new TModel(); | |||
| model->author = author; | |||
| model->slug = slug; | |||
| model->name = name; | |||
| model->tags = {tags...}; | |||
| return model; | |||
| } | |||
| template <class TWidget> | |||
| TWidget *createWidget(Vec pos) { | |||
| TWidget *w = new TWidget(); | |||
| w->box.pos = pos; | |||
| return w; | |||
| } | |||
| /** Deprecated. Use createWidget<TScrew>() instead */ | |||
| template <class TScrew> | |||
| DEPRECATED TScrew *createScrew(Vec pos) { | |||
| return createWidget<TScrew>(pos); | |||
| } | |||
| template <class TParamWidget> | |||
| TParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) { | |||
| TParamWidget *param = new TParamWidget(); | |||
| param->box.pos = pos; | |||
| param->module = module; | |||
| param->paramId = paramId; | |||
| param->setLimits(minValue, maxValue); | |||
| param->setDefaultValue(defaultValue); | |||
| return param; | |||
| } | |||
| template <class TParamWidget> | |||
| TParamWidget *createParamCentered(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) { | |||
| TParamWidget *param = new TParamWidget(); | |||
| param->box.pos = pos.minus(param->box.size.div(2)); | |||
| param->module = module; | |||
| param->paramId = paramId; | |||
| param->setLimits(minValue, maxValue); | |||
| param->setDefaultValue(defaultValue); | |||
| return param; | |||
| } | |||
| template <class TPort> | |||
| TPort *createInput(Vec pos, Module *module, int inputId) { | |||
| TPort *port = new TPort(); | |||
| port->box.pos = pos; | |||
| port->module = module; | |||
| port->type = Port::INPUT; | |||
| port->portId = inputId; | |||
| return port; | |||
| } | |||
| template <class TPort> | |||
| TPort *createInputCentered(Vec pos, Module *module, int inputId) { | |||
| TPort *port = new TPort(); | |||
| port->box.pos = pos.minus(port->box.size.div(2)); | |||
| port->module = module; | |||
| port->type = Port::INPUT; | |||
| port->portId = inputId; | |||
| return port; | |||
| } | |||
| template <class TPort> | |||
| TPort *createOutput(Vec pos, Module *module, int outputId) { | |||
| TPort *port = new TPort(); | |||
| port->box.pos = pos; | |||
| port->module = module; | |||
| port->type = Port::OUTPUT; | |||
| port->portId = outputId; | |||
| return port; | |||
| } | |||
| template <class TPort> | |||
| TPort *createOutputCentered(Vec pos, Module *module, int outputId) { | |||
| TPort *port = new TPort(); | |||
| port->box.pos = pos.minus(port->box.size.div(2)); | |||
| port->module = module; | |||
| port->type = Port::OUTPUT; | |||
| port->portId = outputId; | |||
| return port; | |||
| } | |||
| template<class TModuleLightWidget> | |||
| TModuleLightWidget *createLight(Vec pos, Module *module, int firstLightId) { | |||
| TModuleLightWidget *light = new TModuleLightWidget(); | |||
| light->box.pos = pos; | |||
| light->module = module; | |||
| light->firstLightId = firstLightId; | |||
| return light; | |||
| } | |||
| template<class TModuleLightWidget> | |||
| TModuleLightWidget *createLightCentered(Vec pos, Module *module, int firstLightId) { | |||
| TModuleLightWidget *light = new TModuleLightWidget(); | |||
| light->box.pos = pos.minus(light->box.size.div(2)); | |||
| light->module = module; | |||
| light->firstLightId = firstLightId; | |||
| return light; | |||
| } | |||
| } // namespace rack | |||
| @@ -74,8 +74,7 @@ struct Model { | |||
| return module; | |||
| } | |||
| ModuleWidget *createModuleWidget() override { | |||
| TModule *module = new TModule(); | |||
| TModuleWidget *moduleWidget = new TModuleWidget(module); | |||
| TModuleWidget *moduleWidget = new TModuleWidget(createModule()); | |||
| moduleWidget->model = this; | |||
| return moduleWidget; | |||
| } | |||
| @@ -9,84 +9,4 @@ | |||
| #include "app.hpp" | |||
| #include "ui.hpp" | |||
| #include "componentlibrary.hpp" | |||
| namespace rack { | |||
| //////////////////// | |||
| // helpers | |||
| //////////////////// | |||
| /** Deprecated, use Model::create<TModule, TModuleWidget>(...) instead */ | |||
| template <class TModuleWidget, typename... Tags> | |||
| DEPRECATED Model *createModel(std::string author, std::string slug, std::string name, Tags... tags) { | |||
| struct TModel : Model { | |||
| ModuleWidget *createModuleWidget() override { | |||
| ModuleWidget *moduleWidget = new TModuleWidget(); | |||
| moduleWidget->model = this; | |||
| return moduleWidget; | |||
| } | |||
| }; | |||
| Model *model = new TModel(); | |||
| model->author = author; | |||
| model->slug = slug; | |||
| model->name = name; | |||
| model->tags = {tags...}; | |||
| return model; | |||
| } | |||
| /** Deprecated, use Widget::create<TScrew>() instead */ | |||
| template <class TScrew> | |||
| DEPRECATED TScrew *createScrew(Vec pos) { | |||
| TScrew *screw = new TScrew(); | |||
| screw->box.pos = pos; | |||
| return screw; | |||
| } | |||
| /** Deprecated, use ParamWidget::create<TParamWidget>() instead */ | |||
| template <class TParamWidget> | |||
| DEPRECATED TParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) { | |||
| TParamWidget *param = new TParamWidget(); | |||
| param->box.pos = pos; | |||
| param->module = module; | |||
| param->paramId = paramId; | |||
| param->setLimits(minValue, maxValue); | |||
| param->setDefaultValue(defaultValue); | |||
| return param; | |||
| } | |||
| /** Deprecated, use Port::create<TPort>(..., Port::INPUT, ...) instead */ | |||
| template <class TPort> | |||
| DEPRECATED TPort *createInput(Vec pos, Module *module, int inputId) { | |||
| TPort *port = new TPort(); | |||
| port->box.pos = pos; | |||
| port->module = module; | |||
| port->type = Port::INPUT; | |||
| port->portId = inputId; | |||
| return port; | |||
| } | |||
| /** Deprecated, use Port::create<TPort>(..., Port::OUTPUT, ...) instead */ | |||
| template <class TPort> | |||
| DEPRECATED TPort *createOutput(Vec pos, Module *module, int outputId) { | |||
| TPort *port = new TPort(); | |||
| port->box.pos = pos; | |||
| port->module = module; | |||
| port->type = Port::OUTPUT; | |||
| port->portId = outputId; | |||
| return port; | |||
| } | |||
| /** Deprecated, use ModuleLightWidget::create<TModuleLightWidget>() instead */ | |||
| template<class TModuleLightWidget> | |||
| DEPRECATED TModuleLightWidget *createLight(Vec pos, Module *module, int firstLightId) { | |||
| TModuleLightWidget *light = new TModuleLightWidget(); | |||
| light->box.pos = pos; | |||
| light->module = module; | |||
| light->firstLightId = firstLightId; | |||
| return light; | |||
| } | |||
| } // namespace rack | |||
| #include "helpers.hpp" | |||
| @@ -9,12 +9,12 @@ | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="15.999999" | |||
| height="15.997643" | |||
| viewBox="0 0 4.2333331 4.2327099" | |||
| width="5.4186664mm" | |||
| height="5.4178686mm" | |||
| viewBox="0 0 5.4186663 5.4178686" | |||
| version="1.1" | |||
| id="svg12484" | |||
| inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
| inkscape:version="0.92.2 2405546, 2018-03-11" | |||
| sodipodi:docname="TL1105_0.svg"> | |||
| <defs | |||
| id="defs12478" /> | |||
| @@ -25,9 +25,9 @@ | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="44.8" | |||
| inkscape:cx="1.1769543" | |||
| inkscape:cy="7.1864792" | |||
| inkscape:zoom="11.2" | |||
| inkscape:cx="6.3388991" | |||
| inkscape:cy="5.196676" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="g12430" | |||
| showgrid="false" | |||
| @@ -35,12 +35,12 @@ | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| inkscape:window-width="2560" | |||
| inkscape:window-height="1422" | |||
| inkscape:window-width="1600" | |||
| inkscape:window-height="882" | |||
| inkscape:window-x="0" | |||
| inkscape:window-y="18" | |||
| inkscape:window-maximized="0" | |||
| units="px" /> | |||
| units="mm" /> | |||
| <metadata | |||
| id="metadata12481"> | |||
| <rdf:RDF> | |||
| @@ -57,13 +57,13 @@ | |||
| inkscape:label="Layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-87.434409,-107.81432)"> | |||
| transform="translate(-86.841742,-107.22174)"> | |||
| <g | |||
| transform="matrix(0.15583204,0,0,-0.15583204,44.616575,295.36332)" | |||
| id="g12430" | |||
| style="stroke-width:2.26383328"> | |||
| <g | |||
| transform="translate(301.93513,1189.951)" | |||
| transform="matrix(1.28,0,0,1.28,305.73837,1189.9507)" | |||
| id="g5959-5" | |||
| style="stroke-width:2.26383328"> | |||
| <path | |||
| @@ -73,19 +73,19 @@ | |||
| d="m 0,0 c 0,-7.5 -6.083,-13.58 -13.584,-13.58 -7.5,0 -13.582,6.08 -13.582,13.58 0,7.503 6.082,13.582 13.582,13.582 C -6.083,13.582 0,7.503 0,0" /> | |||
| </g> | |||
| <circle | |||
| style="opacity:1;vector-effect:none;fill:#676967;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.26383328;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
| style="opacity:1;vector-effect:none;fill:#676967;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.89770651;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
| id="circle12436" | |||
| cx="288.35214" | |||
| cy="-1190.6586" | |||
| r="11.277138" | |||
| cy="-1190.8564" | |||
| r="14.434736" | |||
| transform="scale(1,-1)" /> | |||
| <circle | |||
| transform="scale(1,-1)" | |||
| r="11.277138" | |||
| r="14.434736" | |||
| cy="-1189.952" | |||
| cx="288.35214" | |||
| id="path12411" | |||
| style="opacity:1;vector-effect:none;fill:#2b2d2b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.26383328;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
| style="opacity:1;vector-effect:none;fill:#2b2d2b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.89770651;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -9,12 +9,12 @@ | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="15.999999" | |||
| height="15.997643" | |||
| viewBox="0 0 4.2333331 4.2327099" | |||
| width="5.4186664mm" | |||
| height="5.4178686mm" | |||
| viewBox="0 0 5.4186663 5.4178686" | |||
| version="1.1" | |||
| id="svg12484" | |||
| inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
| inkscape:version="0.92.2 2405546, 2018-03-11" | |||
| sodipodi:docname="TL1105_1.svg"> | |||
| <defs | |||
| id="defs12478" /> | |||
| @@ -25,9 +25,9 @@ | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="44.8" | |||
| inkscape:cx="5.4698259" | |||
| inkscape:cy="8.0360204" | |||
| inkscape:zoom="15.839192" | |||
| inkscape:cx="5.770688" | |||
| inkscape:cy="6.8891413" | |||
| inkscape:document-units="mm" | |||
| inkscape:current-layer="g12476" | |||
| showgrid="false" | |||
| @@ -35,12 +35,12 @@ | |||
| fit-margin-left="0" | |||
| fit-margin-right="0" | |||
| fit-margin-bottom="0" | |||
| inkscape:window-width="2560" | |||
| inkscape:window-height="1422" | |||
| inkscape:window-width="1600" | |||
| inkscape:window-height="882" | |||
| inkscape:window-x="0" | |||
| inkscape:window-y="18" | |||
| inkscape:window-maximized="0" | |||
| units="px" /> | |||
| units="mm" /> | |||
| <metadata | |||
| id="metadata12481"> | |||
| <rdf:RDF> | |||
| @@ -57,14 +57,14 @@ | |||
| inkscape:label="Layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(-155.97001,-114.87325)"> | |||
| transform="translate(-155.37735,-114.28067)"> | |||
| <g | |||
| id="g12476" | |||
| transform="matrix(0.15583204,0,0,-0.15583204,113.15218,302.42225)" | |||
| style="stroke-width:2.26383328"> | |||
| <g | |||
| id="g12468" | |||
| transform="translate(301.93513,1189.951)" | |||
| transform="matrix(1.28,0,0,1.28,305.73837,1189.9507)" | |||
| style="stroke-width:2.26383328"> | |||
| <path | |||
| d="m 0,0 c 0,-7.5 -6.083,-13.58 -13.584,-13.58 -7.5,0 -13.582,6.08 -13.582,13.58 0,7.503 6.082,13.582 13.582,13.582 C -6.083,13.582 0,7.503 0,0" | |||
| @@ -74,17 +74,17 @@ | |||
| </g> | |||
| <circle | |||
| transform="scale(1,-1)" | |||
| r="11.277138" | |||
| cy="-1189.2383" | |||
| r="14.434736" | |||
| cy="-1189.0385" | |||
| cx="288.35214" | |||
| id="circle12472" | |||
| style="opacity:1;vector-effect:none;fill:#676967;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.26383328;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
| style="opacity:1;vector-effect:none;fill:#676967;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.89770651;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> | |||
| <circle | |||
| style="opacity:1;vector-effect:none;fill:#141514;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.26383328;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
| style="opacity:1;vector-effect:none;fill:#141514;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.89770651;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |||
| id="circle12474" | |||
| cx="288.35214" | |||
| cy="-1189.952" | |||
| r="11.277138" | |||
| r="14.434736" | |||
| transform="scale(1,-1)" /> | |||
| </g> | |||
| </g> | |||