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.

130 lines
3.4KB

  1. #include "plugin.hpp"
  2. #include "engine.hpp"
  3. #include "app.hpp"
  4. namespace rack {
  5. template <class TModuleWidget, typename... Tags>
  6. Model *createModel(std::string author, std::string slug, std::string name, Tags... tags) {
  7. struct TModel : Model {
  8. Module *createModule() override {
  9. TModule *module = new TModule();
  10. return module;
  11. }
  12. ModuleWidget *createModuleWidget() override {
  13. TModuleWidget *moduleWidget = new TModuleWidget(createModule());
  14. moduleWidget->model = this;
  15. return moduleWidget;
  16. }
  17. ModuleWidget *createModuleWidgetNull() override {
  18. TModuleWidget *moduleWidget = new TModuleWidget(NULL);
  19. moduleWidget->model = this;
  20. return moduleWidget;
  21. }
  22. };
  23. Model *model = new TModel();
  24. model->author = author;
  25. model->slug = slug;
  26. model->name = name;
  27. model->tags = {tags...};
  28. return model;
  29. }
  30. template <class TWidget>
  31. TWidget *createWidget(Vec pos) {
  32. TWidget *w = new TWidget();
  33. w->box.pos = pos;
  34. return w;
  35. }
  36. /** Deprecated. Use createWidget<TScrew>() instead */
  37. template <class TScrew>
  38. DEPRECATED TScrew *createScrew(Vec pos) {
  39. return createWidget<TScrew>(pos);
  40. }
  41. template <class TParamWidget>
  42. TParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) {
  43. TParamWidget *param = new TParamWidget();
  44. param->box.pos = pos;
  45. param->module = module;
  46. param->paramId = paramId;
  47. param->setLimits(minValue, maxValue);
  48. param->setDefaultValue(defaultValue);
  49. return param;
  50. }
  51. template <class TParamWidget>
  52. TParamWidget *createParamCentered(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) {
  53. TParamWidget *param = new TParamWidget();
  54. param->box.pos = pos.minus(param->box.size.div(2));
  55. param->module = module;
  56. param->paramId = paramId;
  57. param->setLimits(minValue, maxValue);
  58. param->setDefaultValue(defaultValue);
  59. return param;
  60. }
  61. template <class TPort>
  62. TPort *createInput(Vec pos, Module *module, int inputId) {
  63. TPort *port = new TPort();
  64. port->box.pos = pos;
  65. port->module = module;
  66. port->type = Port::INPUT;
  67. port->portId = inputId;
  68. return port;
  69. }
  70. template <class TPort>
  71. TPort *createInputCentered(Vec pos, Module *module, int inputId) {
  72. TPort *port = new TPort();
  73. port->box.pos = pos.minus(port->box.size.div(2));
  74. port->module = module;
  75. port->type = Port::INPUT;
  76. port->portId = inputId;
  77. return port;
  78. }
  79. template <class TPort>
  80. TPort *createOutput(Vec pos, Module *module, int outputId) {
  81. TPort *port = new TPort();
  82. port->box.pos = pos;
  83. port->module = module;
  84. port->type = Port::OUTPUT;
  85. port->portId = outputId;
  86. return port;
  87. }
  88. template <class TPort>
  89. TPort *createOutputCentered(Vec pos, Module *module, int outputId) {
  90. TPort *port = new TPort();
  91. port->box.pos = pos.minus(port->box.size.div(2));
  92. port->module = module;
  93. port->type = Port::OUTPUT;
  94. port->portId = outputId;
  95. return port;
  96. }
  97. template<class TModuleLightWidget>
  98. TModuleLightWidget *createLight(Vec pos, Module *module, int firstLightId) {
  99. TModuleLightWidget *light = new TModuleLightWidget();
  100. light->box.pos = pos;
  101. light->module = module;
  102. light->firstLightId = firstLightId;
  103. return light;
  104. }
  105. template<class TModuleLightWidget>
  106. TModuleLightWidget *createLightCentered(Vec pos, Module *module, int firstLightId) {
  107. TModuleLightWidget *light = new TModuleLightWidget();
  108. light->box.pos = pos.minus(light->box.size.div(2));
  109. light->module = module;
  110. light->firstLightId = firstLightId;
  111. return light;
  112. }
  113. } // namespace rack