diff options
author | crupest <crupest@outlook.com> | 2018-11-11 17:38:05 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-11-11 17:38:05 +0800 |
commit | 61b44c223df9c3d2a6daec85f693a2b9a406f5c9 (patch) | |
tree | 2594670863ef855222cb5af1798807f2c263ab66 /src/main.cpp | |
parent | 3cc588ade5ac08e53c406cea6bfcaaafac4346cf (diff) | |
download | cru-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.cpp | 31 |
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); } |