| 
							- #pragma once
 - #include <plugin/Model.hpp>
 - #include <ui/MenuOverlay.hpp>
 - #include <ui/MenuItem.hpp>
 - #include <ui/MenuLabel.hpp>
 - #include <ui/Menu.hpp>
 - #include <app/PortWidget.hpp>
 - #include <app/ParamWidget.hpp>
 - #include <app/Scene.hpp>
 - #include <engine/Module.hpp>
 - #include <engine/ParamQuantity.hpp>
 - #include <app.hpp>
 - #include <window.hpp>
 - 
 - 
 - namespace rack {
 - 
 - 
 - template <class TModule, class TModuleWidget, typename... Tags>
 - plugin::Model *createModel(const std::string &slug) {
 - 	struct TModel : plugin::Model {
 - 		engine::Module *createModule() override {
 - 			TModule *m = new TModule;
 - 			m->model = this;
 - 			return m;
 - 		}
 - 		app::ModuleWidget *createModuleWidget() override {
 - 			TModule *m = new TModule;
 - 			m->model = this;
 - 			TModuleWidget *mw = new TModuleWidget(m);
 - 			mw->model = this;
 - 			return mw;
 - 		}
 - 		app::ModuleWidget *createModuleWidgetNull() override {
 - 			TModuleWidget *mw = new TModuleWidget(NULL);
 - 			mw->model = this;
 - 			return mw;
 - 		}
 - 	};
 - 
 - 	plugin::Model *o = new TModel;
 - 	o->slug = slug;
 - 	return o;
 - }
 - 
 - template <class TWidget>
 - TWidget *createWidget(math::Vec pos) {
 - 	TWidget *o = new TWidget;
 - 	o->box.pos = pos;
 - 	return o;
 - }
 - 
 - template <class TWidget>
 - TWidget *createWidgetCentered(math::Vec pos) {
 - 	TWidget *o = createWidget<TWidget>(pos);
 - 	o->box.pos = o->box.pos.minus(o->box.size.div(2));
 - 	return o;
 - }
 - 
 - template <class TParamWidget>
 - TParamWidget *createParam(math::Vec pos, engine::Module *module, int paramId) {
 - 	TParamWidget *o = new TParamWidget;
 - 	o->box.pos = pos;
 - 	if (module) {
 - 		o->paramQuantity = module->paramQuantities[paramId];
 - 	}
 - 	return o;
 - }
 - 
 - template <class TParamWidget>
 - TParamWidget *createParamCentered(math::Vec pos, engine::Module *module, int paramId) {
 - 	TParamWidget *o = createParam<TParamWidget>(pos, module, paramId);
 - 	o->box.pos = o->box.pos.minus(o->box.size.div(2));
 - 	return o;
 - }
 - 
 - template <class TPortWidget>
 - TPortWidget *createInput(math::Vec pos, engine::Module *module, int inputId) {
 - 	TPortWidget *o = new TPortWidget;
 - 	o->box.pos = pos;
 - 	o->module = module;
 - 	o->type = app::PortWidget::INPUT;
 - 	o->portId = inputId;
 - 	return o;
 - }
 - 
 - template <class TPortWidget>
 - TPortWidget *createInputCentered(math::Vec pos, engine::Module *module, int inputId) {
 - 	TPortWidget *o = createInput<TPortWidget>(pos, module, inputId);
 - 	o->box.pos = o->box.pos.minus(o->box.size.div(2));
 - 	return o;
 - }
 - 
 - template <class TPortWidget>
 - TPortWidget *createOutput(math::Vec pos, engine::Module *module, int outputId) {
 - 	TPortWidget *o = new TPortWidget;
 - 	o->box.pos = pos;
 - 	o->module = module;
 - 	o->type = app::PortWidget::OUTPUT;
 - 	o->portId = outputId;
 - 	return o;
 - }
 - 
 - template <class TPortWidget>
 - TPortWidget *createOutputCentered(math::Vec pos, engine::Module *module, int outputId) {
 - 	TPortWidget *o = createOutput<TPortWidget>(pos, module, outputId);
 - 	o->box.pos = o->box.pos.minus(o->box.size.div(2));
 - 	return o;
 - }
 - 
 - template <class TModuleLightWidget>
 - TModuleLightWidget *createLight(math::Vec pos, engine::Module *module, int firstLightId) {
 - 	TModuleLightWidget *o = new TModuleLightWidget;
 - 	o->box.pos = pos;
 - 	o->module = module;
 - 	o->firstLightId = firstLightId;
 - 	return o;
 - }
 - 
 - template <class TModuleLightWidget>
 - TModuleLightWidget *createLightCentered(math::Vec pos, engine::Module *module, int firstLightId) {
 - 	TModuleLightWidget *o = createLight<TModuleLightWidget>(pos, module, firstLightId);
 - 	o->box.pos = o->box.pos.minus(o->box.size.div(2));
 - 	return o;
 - }
 - 
 - template <class TMenuLabel = ui::MenuLabel>
 - TMenuLabel *createMenuLabel(std::string text) {
 - 	TMenuLabel *o = new TMenuLabel;
 - 	o->text = text;
 - 	return o;
 - }
 - 
 - template <class TMenuItem = ui::MenuItem>
 - TMenuItem *createMenuItem(std::string text, std::string rightText = "") {
 - 	TMenuItem *o = new TMenuItem;
 - 	o->text = text;
 - 	o->rightText = rightText;
 - 	return o;
 - }
 - 
 - template <class TMenu = ui::Menu>
 - TMenu *createMenu() {
 - 	TMenu *o = new TMenu;
 - 	o->box.pos = APP->window->mousePos;
 - 
 - 	ui::MenuOverlay *menuOverlay = new ui::MenuOverlay;
 - 	menuOverlay->addChild(o);
 - 
 - 	APP->scene->addChild(menuOverlay);
 - 	return o;
 - }
 - 
 - 
 - } // namespace rack
 
 
  |