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.

88 lines
2.0KB

  1. #pragma once
  2. #include "util.hpp"
  3. #include "math.hpp"
  4. #include "asset.hpp"
  5. #include "plugin.hpp"
  6. #include "engine.hpp"
  7. #include "gui.hpp"
  8. #include "app.hpp"
  9. #include "components.hpp"
  10. namespace rack {
  11. ////////////////////
  12. // helpers
  13. ////////////////////
  14. template <class TModuleWidget, typename... Tags>
  15. Model *createModel(std::string manufacturerSlug, std::string manufacturerName, std::string slug, std::string name, Tags... tags) {
  16. struct TModel : Model {
  17. ModuleWidget *createModuleWidget() override {
  18. ModuleWidget *moduleWidget = new TModuleWidget();
  19. moduleWidget->model = this;
  20. return moduleWidget;
  21. }
  22. };
  23. Model *model = new TModel();
  24. model->slug = slug;
  25. model->name = name;
  26. model->manufacturerSlug = manufacturerSlug;
  27. model->manufacturerName = manufacturerName;
  28. model->tags = {tags...};
  29. return model;
  30. }
  31. template <class TScrew>
  32. Widget *createScrew(Vec pos) {
  33. Widget *screw = new TScrew();
  34. screw->box.pos = pos;
  35. return screw;
  36. }
  37. template <class TParamWidget>
  38. ParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) {
  39. ParamWidget *param = new TParamWidget();
  40. param->box.pos = pos;
  41. param->module = module;
  42. param->paramId = paramId;
  43. param->setLimits(minValue, maxValue);
  44. param->setDefaultValue(defaultValue);
  45. return param;
  46. }
  47. template <class TPort>
  48. Port *createInput(Vec pos, Module *module, int inputId) {
  49. Port *port = new TPort();
  50. port->box.pos = pos;
  51. port->module = module;
  52. port->type = Port::INPUT;
  53. port->portId = inputId;
  54. return port;
  55. }
  56. template <class TPort>
  57. Port *createOutput(Vec pos, Module *module, int outputId) {
  58. Port *port = new TPort();
  59. port->box.pos = pos;
  60. port->module = module;
  61. port->type = Port::OUTPUT;
  62. port->portId = outputId;
  63. return port;
  64. }
  65. template<class TModuleLightWidget>
  66. ModuleLightWidget *createLight(Vec pos, Module *module, int lightId) {
  67. ModuleLightWidget *light = new TModuleLightWidget();
  68. light->box.pos = pos;
  69. light->module = module;
  70. light->lightId = lightId;
  71. return light;
  72. }
  73. } // namespace rack