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.

80 lines
1.7KB

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