aboutsummaryrefslogtreecommitdiff
path: root/src/ui/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/components')
-rw-r--r--src/ui/components/Menu.cpp6
-rw-r--r--src/ui/components/PopupButton.cpp2
-rw-r--r--src/ui/components/Select.cpp31
3 files changed, 36 insertions, 3 deletions
diff --git a/src/ui/components/Menu.cpp b/src/ui/components/Menu.cpp
index 74909c85..ae00a2b2 100644
--- a/src/ui/components/Menu.cpp
+++ b/src/ui/components/Menu.cpp
@@ -92,8 +92,10 @@ void PopupMenu::SetPosition(const Point& position) {
void PopupMenu::Show() {
popup_.GetWindowHost()->RelayoutWithSize(Size::Infinate(), true);
- popup_.GetWindowHost()->GetNativeWindow()->SetVisibility(
- platform::gui::WindowVisibilityType::Show);
+ auto native_window = popup_.GetWindowHost()->GetNativeWindow();
+ native_window->SetVisibility(platform::gui::WindowVisibilityType::Show);
+ native_window->RequestFocus();
+ native_window->SetToForeground();
}
void PopupMenu::Close() { popup_.GetWindowHost()->GetNativeWindow()->Close(); }
diff --git a/src/ui/components/PopupButton.cpp b/src/ui/components/PopupButton.cpp
index 606d5fd8..8eed7c09 100644
--- a/src/ui/components/PopupButton.cpp
+++ b/src/ui/components/PopupButton.cpp
@@ -7,7 +7,7 @@ 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_.SetPosition(args.GetDownPointOfScreen());
popup_menu_.Show();
});
}
diff --git a/src/ui/components/Select.cpp b/src/ui/components/Select.cpp
new file mode 100644
index 00000000..9f9fbfae
--- /dev/null
+++ b/src/ui/components/Select.cpp
@@ -0,0 +1,31 @@
+#include "cru/ui/components/Select.h"
+
+namespace cru::ui::components {
+Select::Select() {
+ button_.SetChild(&button_text_);
+ button_.ClickEvent()->AddHandler([this](const helper::ClickEventArgs& args) {
+ popup_menu_.SetPosition(args.GetDownPoint());
+ popup_menu_.Show();
+ });
+}
+
+Select::~Select() { button_.RemoveFromParent(); }
+
+void Select::SetItems(std::vector<String> items) {
+ popup_menu_.GetMenu()->ClearItems();
+ for (Index i = 0; i < items.size(); i++) {
+ popup_menu_.GetMenu()->AddTextItem(std::move(items[i]),
+ [this, i] { SetSelectedIndex(i); });
+ }
+}
+
+void Select::SetSelectedIndex(Index index) {
+ selected_index_ = index;
+ if (index >= 0 && index < items_.size()) {
+ button_text_.SetText(items_[index]);
+ } else {
+ button_text_.SetText({});
+ }
+ item_selected_event_.Raise(index);
+}
+} // namespace cru::ui::components