| @@ -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; | return module; | ||||
| } | } | ||||
| ModuleWidget *createModuleWidget() override { | ModuleWidget *createModuleWidget() override { | ||||
| TModule *module = new TModule(); | |||||
| TModuleWidget *moduleWidget = new TModuleWidget(module); | |||||
| TModuleWidget *moduleWidget = new TModuleWidget(createModule()); | |||||
| moduleWidget->model = this; | moduleWidget->model = this; | ||||
| return moduleWidget; | return moduleWidget; | ||||
| } | } | ||||
| @@ -9,84 +9,4 @@ | |||||
| #include "app.hpp" | #include "app.hpp" | ||||
| #include "ui.hpp" | #include "ui.hpp" | ||||
| #include "componentlibrary.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="http://www.w3.org/2000/svg" | ||||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | 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" | version="1.1" | ||||
| id="svg12484" | 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"> | sodipodi:docname="TL1105_0.svg"> | ||||
| <defs | <defs | ||||
| id="defs12478" /> | id="defs12478" /> | ||||
| @@ -25,9 +25,9 @@ | |||||
| borderopacity="1.0" | borderopacity="1.0" | ||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | 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:document-units="mm" | ||||
| inkscape:current-layer="g12430" | inkscape:current-layer="g12430" | ||||
| showgrid="false" | showgrid="false" | ||||
| @@ -35,12 +35,12 @@ | |||||
| fit-margin-left="0" | fit-margin-left="0" | ||||
| fit-margin-right="0" | fit-margin-right="0" | ||||
| fit-margin-bottom="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-x="0" | ||||
| inkscape:window-y="18" | inkscape:window-y="18" | ||||
| inkscape:window-maximized="0" | inkscape:window-maximized="0" | ||||
| units="px" /> | |||||
| units="mm" /> | |||||
| <metadata | <metadata | ||||
| id="metadata12481"> | id="metadata12481"> | ||||
| <rdf:RDF> | <rdf:RDF> | ||||
| @@ -57,13 +57,13 @@ | |||||
| inkscape:label="Layer 1" | inkscape:label="Layer 1" | ||||
| inkscape:groupmode="layer" | inkscape:groupmode="layer" | ||||
| id="layer1" | id="layer1" | ||||
| transform="translate(-87.434409,-107.81432)"> | |||||
| transform="translate(-86.841742,-107.22174)"> | |||||
| <g | <g | ||||
| transform="matrix(0.15583204,0,0,-0.15583204,44.616575,295.36332)" | transform="matrix(0.15583204,0,0,-0.15583204,44.616575,295.36332)" | ||||
| id="g12430" | id="g12430" | ||||
| style="stroke-width:2.26383328"> | style="stroke-width:2.26383328"> | ||||
| <g | <g | ||||
| transform="translate(301.93513,1189.951)" | |||||
| transform="matrix(1.28,0,0,1.28,305.73837,1189.9507)" | |||||
| id="g5959-5" | id="g5959-5" | ||||
| style="stroke-width:2.26383328"> | style="stroke-width:2.26383328"> | ||||
| <path | <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" /> | 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> | </g> | ||||
| <circle | <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" | id="circle12436" | ||||
| cx="288.35214" | cx="288.35214" | ||||
| cy="-1190.6586" | |||||
| r="11.277138" | |||||
| cy="-1190.8564" | |||||
| r="14.434736" | |||||
| transform="scale(1,-1)" /> | transform="scale(1,-1)" /> | ||||
| <circle | <circle | ||||
| transform="scale(1,-1)" | transform="scale(1,-1)" | ||||
| r="11.277138" | |||||
| r="14.434736" | |||||
| cy="-1189.952" | cy="-1189.952" | ||||
| cx="288.35214" | cx="288.35214" | ||||
| id="path12411" | 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> | ||||
| </g> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -9,12 +9,12 @@ | |||||
| xmlns="http://www.w3.org/2000/svg" | xmlns="http://www.w3.org/2000/svg" | ||||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | 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" | version="1.1" | ||||
| id="svg12484" | 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"> | sodipodi:docname="TL1105_1.svg"> | ||||
| <defs | <defs | ||||
| id="defs12478" /> | id="defs12478" /> | ||||
| @@ -25,9 +25,9 @@ | |||||
| borderopacity="1.0" | borderopacity="1.0" | ||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | 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:document-units="mm" | ||||
| inkscape:current-layer="g12476" | inkscape:current-layer="g12476" | ||||
| showgrid="false" | showgrid="false" | ||||
| @@ -35,12 +35,12 @@ | |||||
| fit-margin-left="0" | fit-margin-left="0" | ||||
| fit-margin-right="0" | fit-margin-right="0" | ||||
| fit-margin-bottom="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-x="0" | ||||
| inkscape:window-y="18" | inkscape:window-y="18" | ||||
| inkscape:window-maximized="0" | inkscape:window-maximized="0" | ||||
| units="px" /> | |||||
| units="mm" /> | |||||
| <metadata | <metadata | ||||
| id="metadata12481"> | id="metadata12481"> | ||||
| <rdf:RDF> | <rdf:RDF> | ||||
| @@ -57,14 +57,14 @@ | |||||
| inkscape:label="Layer 1" | inkscape:label="Layer 1" | ||||
| inkscape:groupmode="layer" | inkscape:groupmode="layer" | ||||
| id="layer1" | id="layer1" | ||||
| transform="translate(-155.97001,-114.87325)"> | |||||
| transform="translate(-155.37735,-114.28067)"> | |||||
| <g | <g | ||||
| id="g12476" | id="g12476" | ||||
| transform="matrix(0.15583204,0,0,-0.15583204,113.15218,302.42225)" | transform="matrix(0.15583204,0,0,-0.15583204,113.15218,302.42225)" | ||||
| style="stroke-width:2.26383328"> | style="stroke-width:2.26383328"> | ||||
| <g | <g | ||||
| id="g12468" | 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"> | style="stroke-width:2.26383328"> | ||||
| <path | <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" | 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> | </g> | ||||
| <circle | <circle | ||||
| transform="scale(1,-1)" | transform="scale(1,-1)" | ||||
| r="11.277138" | |||||
| cy="-1189.2383" | |||||
| r="14.434736" | |||||
| cy="-1189.0385" | |||||
| cx="288.35214" | cx="288.35214" | ||||
| id="circle12472" | 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 | <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" | id="circle12474" | ||||
| cx="288.35214" | cx="288.35214" | ||||
| cy="-1189.952" | cy="-1189.952" | ||||
| r="11.277138" | |||||
| r="14.434736" | |||||
| transform="scale(1,-1)" /> | transform="scale(1,-1)" /> | ||||
| </g> | </g> | ||||
| </g> | </g> | ||||