|
- #pragma once
- #include "app/common.hpp"
- #include "widgets/OpaqueWidget.hpp"
- #include "widgets/FramebufferWidget.hpp"
- #include "app/CableContainer.hpp"
- #include "app/ModuleWidget.hpp"
-
-
- namespace rack {
-
-
- struct RackWidget : OpaqueWidget {
- FramebufferWidget *rails;
- // Only put ModuleWidgets in here
- Widget *moduleContainer;
- // Only put CableWidgets in here
- CableContainer *cableContainer;
- std::string lastPath;
- math::Vec lastMousePos;
-
- RackWidget();
- ~RackWidget();
-
- /** Completely clear the rack's modules and cables */
- void clear();
- /** Clears the rack and loads the template patch */
- void reset();
- void loadDialog();
- void saveDialog();
- void saveAsDialog();
- void saveTemplate();
- /** If `lastPath` is defined, ask the user to reload it */
- void revert();
- /** Disconnects all cables */
- void disconnect();
- void save(std::string filename);
- void load(std::string filename);
- json_t *toJson();
- void fromJson(json_t *rootJ);
- /** Creates a module and adds it to the rack */
- ModuleWidget *moduleFromJson(json_t *moduleJ);
- void pastePresetClipboard();
-
- void addModule(ModuleWidget *m);
- void addModuleAtMouse(ModuleWidget *m);
- /** Removes the module and transfers ownership to the caller */
- void removeModule(ModuleWidget *m);
- void cloneModule(ModuleWidget *m);
- /** Sets a module's box if non-colliding. Returns true if set */
- bool requestModuleBox(ModuleWidget *m, math::Rect box);
- /** Moves a module to the closest non-colliding position */
- bool requestModuleBoxNearest(ModuleWidget *m, math::Rect box);
- ModuleWidget *getModule(int moduleId);
-
- void step() override;
- void draw(NVGcontext *vg) override;
-
- void onHover(const event::Hover &e) override;
- void onDragHover(const event::DragHover &e) override;
- void onButton(const event::Button &e) override;
- void onZoom(const event::Zoom &e) override;
- };
-
-
- } // namespace rack
|