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.

141 lines
3.4KB

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