aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-11-11 17:38:05 +0800
committercrupest <crupest@outlook.com>2018-11-11 17:38:05 +0800
commit61b44c223df9c3d2a6daec85f693a2b9a406f5c9 (patch)
tree2594670863ef855222cb5af1798807f2c263ab66 /src/main.cpp
parent3cc588ade5ac08e53c406cea6bfcaaafac4346cf (diff)
downloadcru-61b44c223df9c3d2a6daec85f693a2b9a406f5c9.tar.gz
cru-61b44c223df9c3d2a6daec85f693a2b9a406f5c9.tar.bz2
cru-61b44c223df9c3d2a6daec85f693a2b9a406f5c9.zip
Add popup menu. Fix a potential bug in window destroy.
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp31
1 files changed, 6 insertions, 25 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 5ae7257e..76579c0d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,6 +6,7 @@
#include "ui/controls/button.hpp"
#include "ui/controls/text_box.hpp"
#include "ui/controls/list_item.hpp"
+#include "ui/controls/popup_menu.hpp"
using cru::String;
using cru::StringView;
@@ -120,32 +121,12 @@ int APIENTRY wWinMain(
button->AddChild(TextBlock::Create(L"Show popup window parenting this."));
button->mouse_click_event.AddHandler([window, button](auto)
{
- const auto popup = Window::CreatePopup(window);
+ std::vector<cru::ui::controls::MenuItemInfo> items;
+ items.emplace_back(L"Hello world!", []{});
+ items.emplace_back(L"Item 2", []{});
+ items.emplace_back(L"Close parent window.", [window]{ window->Close(); });
- auto create_menu_item = [](const String& text) -> ListItem*
- {
- auto text_block = TextBlock::Create(text);
- text_block->GetLayoutParams()->width.alignment = Alignment::Start;
-
- return CreateWithLayout<ListItem>(
- LayoutSideParams::Stretch(Alignment::Center),
- LayoutSideParams::Content(Alignment::Start),
- ControlList{ text_block }
- );
- };
-
- const auto menu = LinearLayout::Create(LinearLayout::Orientation::Vertical, ControlList{
- create_menu_item(L"copy"),
- create_menu_item(L"cut"),
- create_menu_item(L"paste")
- });
-
- popup->AddChild(menu);
-
- popup->SetSizeFitContent();
- popup->SetWindowPosition(window->PointToScreen(button->GetPositionAbsolute()));
-
- popup->Show();
+ cru::ui::controls::CreatePopupMenu(window->PointToScreen(button->GetPositionAbsolute()), items, window)->Show();
});
layout->AddChild(button);
}