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.

49 lines
1.3KB

  1. #pragma once
  2. #include "app/common.hpp"
  3. #include "widgets/OpaqueWidget.hpp"
  4. #include "widgets/FramebufferWidget.hpp"
  5. #include "app/CableContainer.hpp"
  6. #include "app/ModuleWidget.hpp"
  7. namespace rack {
  8. struct RackWidget : OpaqueWidget {
  9. FramebufferWidget *rails;
  10. Widget *moduleContainer;
  11. CableContainer *cableContainer;
  12. /** The last mouse position in the RackWidget */
  13. math::Vec mousePos;
  14. RackWidget();
  15. ~RackWidget();
  16. void addModule(ModuleWidget *mw);
  17. void addModuleAtMouse(ModuleWidget *mw);
  18. /** Removes the module and transfers ownership to the caller */
  19. void removeModule(ModuleWidget *mw);
  20. /** Sets a module's box if non-colliding. Returns true if set */
  21. bool requestModuleBox(ModuleWidget *mw, math::Rect requestedBox);
  22. /** Moves a module to the closest non-colliding position */
  23. bool requestModuleBoxNearest(ModuleWidget *mw, math::Rect requestedBox);
  24. ModuleWidget *getModule(int moduleId);
  25. /** Completely clear the rack's modules and cables */
  26. void clear();
  27. json_t *toJson();
  28. void fromJson(json_t *rootJ);
  29. void pastePresetClipboard();
  30. void step() override;
  31. void draw(NVGcontext *vg) override;
  32. void onHover(const event::Hover &e) override;
  33. void onDragHover(const event::DragHover &e) override;
  34. void onButton(const event::Button &e) override;
  35. void onZoom(const event::Zoom &e) override;
  36. };
  37. } // namespace rack