#pragma once #include "SimpleWidgets.hpp" #include "FloatingLayout.hpp" namespace tp { class FloatingWidget : public Widget { public: FloatingWidget() : Widget() { setDebug("float", { 0.0, 0.9, 0.1, 1 }); setLayout(new FloatingLayout(this)); } void process(const EventHandler& events) override; void draw(Canvas& canvas) override; [[nodiscard]] bool needsNextFrame() const override; [[nodiscard]] bool propagateEventsToChildren() const override; [[nodiscard]] bool processesEvents() const override; [[nodiscard]] bool isFloating() const; private: FloatingLayout* layout(); [[nodiscard]] const FloatingLayout* layout() const; }; class FloatingMenu : public FloatingWidget { public: FloatingMenu() : FloatingWidget() { setDebug("float menu", { 0.0, 0.9, 0.1, 0.7 }); // addChild(&mMenuLayout); addChild(&mHeader); addChild(&mBodyLayout); mHeader.setText("Menu"); mHeader.setSizePolicy(SizePolicy::Expanding, SizePolicy::Minimal); mBodyLayout.setSizePolicy(SizePolicy::Expanding, SizePolicy::Expanding); // getLayout()->setLayoutPolicy(LayoutPolicy::Vertical); // mBodyLayout.getLayout()->setLayoutPolicy(LayoutPolicy::Vertical); } public: void addToMenu(Widget* widget) { widget->setSizePolicy(SizePolicy::Expanding, SizePolicy::Minimal); mBodyLayout.addChild(widget); } private: // VerticalLayout mMenuLayout; Widget mBodyLayout; LabelWidget mHeader; // ButtonWidget mTestButton; }; }