From fa6e9a419f688df12a57199aa3b4dce10cc6fd49 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 15 Feb 2022 20:52:37 +0800 Subject: ... --- src/ui/components/PopupButton.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/ui/components/PopupButton.cpp (limited to 'src/ui/components/PopupButton.cpp') diff --git a/src/ui/components/PopupButton.cpp b/src/ui/components/PopupButton.cpp new file mode 100644 index 00000000..606d5fd8 --- /dev/null +++ b/src/ui/components/PopupButton.cpp @@ -0,0 +1,24 @@ +#include "cru/ui/components/PopupButton.h" +#include "cru/ui/components/Menu.h" +#include "cru/ui/controls/Popup.h" +#include "cru/ui/helper/ClickDetector.h" + +namespace cru::ui::components { +PopupMenuTextButton::PopupMenuTextButton() : popup_menu_(&button_) { + button_.SetChild(&button_text_); + button_.ClickEvent()->AddHandler([this](const helper::ClickEventArgs& args) { + popup_menu_.SetPosition(args.GetDownPoint()); + popup_menu_.Show(); + }); +} + +PopupMenuTextButton::~PopupMenuTextButton() { button_.RemoveFromParent(); } + +void PopupMenuTextButton::SetMenuItems(std::vector items) { + popup_menu_.GetMenu()->ClearItems(); + for (Index i = 0; i < items.size(); i++) { + popup_menu_.GetMenu()->AddTextItem( + std::move(items[i]), [this, i] { menu_item_selected_event_.Raise(i); }); + } +} +} // namespace cru::ui::components -- cgit v1.2.3