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.

81 lines
1.8KB

  1. #pragma once
  2. #include "plugin.hpp"
  3. #include "engine.hpp"
  4. #include "gui.hpp"
  5. #include "components.hpp"
  6. namespace rack {
  7. ////////////////////
  8. // helpers
  9. ////////////////////
  10. template <class TModuleWidget>
  11. Model *createModel(Plugin *plugin, std::string slug, std::string name) {
  12. struct TModel : Model {
  13. ModuleWidget *createModuleWidget() {
  14. ModuleWidget *moduleWidget = new TModuleWidget();
  15. moduleWidget->model = this;
  16. return moduleWidget;
  17. }
  18. };
  19. Model *model = new TModel();
  20. model->plugin = plugin;
  21. model->slug = slug;
  22. model->name = name;
  23. // Create bi-directional association between the Plugin and Model
  24. if (plugin) {
  25. plugin->models.push_back(model);
  26. }
  27. return model;
  28. }
  29. template <class TParam>
  30. ParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) {
  31. ParamWidget *param = new TParam();
  32. param->box.pos = pos;
  33. param->module = module;
  34. param->paramId = paramId;
  35. param->setLimits(minValue, maxValue);
  36. param->setDefaultValue(defaultValue);
  37. return param;
  38. }
  39. template <class TInputPort>
  40. InputPort *createInput(Vec pos, Module *module, int inputId) {
  41. InputPort *port = new TInputPort();
  42. port->box.pos = pos;
  43. port->module = module;
  44. port->inputId = inputId;
  45. return port;
  46. }
  47. template <class TOutputPort>
  48. OutputPort *createOutput(Vec pos, Module *module, int outputId) {
  49. OutputPort *port = new TOutputPort();
  50. port->box.pos = pos;
  51. port->module = module;
  52. port->outputId = outputId;
  53. return port;
  54. }
  55. template <class TScrew>
  56. Screw *createScrew(Vec pos) {
  57. Screw *screw = new TScrew();
  58. screw->box.pos = pos;
  59. return screw;
  60. }
  61. template <class TLight>
  62. ValueLight *createValueLight(Vec pos, float *value) {
  63. ValueLight *light = new TLight();
  64. light->box.pos = pos;
  65. light->value = value;
  66. return light;
  67. }
  68. } // namespace rack