diff options
Diffstat (limited to 'include/cru/ui/components/Menu.hpp')
-rw-r--r-- | include/cru/ui/components/Menu.hpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/include/cru/ui/components/Menu.hpp b/include/cru/ui/components/Menu.hpp index d60d38eb..96b21173 100644 --- a/include/cru/ui/components/Menu.hpp +++ b/include/cru/ui/components/Menu.hpp @@ -4,9 +4,9 @@ #include "cru/ui/controls/Button.hpp" #include "cru/ui/controls/Control.hpp" #include "cru/ui/controls/FlexLayout.hpp" +#include "cru/ui/controls/Popup.hpp" #include "cru/ui/controls/TextBlock.hpp" -#include <string> #include <vector> namespace cru::ui::components { @@ -40,6 +40,8 @@ class Menu : public Component { ~Menu(); public: + controls::Control* GetRootControl() override { return container_; } + gsl::index GetItemCount() const { return static_cast<gsl::index>(items_.size()); } @@ -57,4 +59,29 @@ class Menu : public Component { controls::FlexLayout* container_; std::vector<Component*> items_; }; + +class PopupMenu : public Component { + public: + explicit PopupMenu(controls::Control* attached_control = nullptr); + + CRU_DELETE_COPY(PopupMenu) + CRU_DELETE_MOVE(PopupMenu) + + ~PopupMenu(); + + public: + controls::Control* GetRootControl() override; + + controls::Popup* GetPopup() { return popup_; } + Menu* GetMenu() { return menu_; } + + void SetPosition(const Point& position); + void Show(); + + private: + controls::Control* attached_control_; + + controls::Popup* popup_; + Menu* menu_; +}; } // namespace cru::ui::components |