diff options
author | crupest <crupest@outlook.com> | 2022-02-15 20:52:37 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-02-15 20:52:37 +0800 |
commit | fa6e9a419f688df12a57199aa3b4dce10cc6fd49 (patch) | |
tree | ab29f60da18826d287e84bb53bc124694fcccb2a | |
parent | 85f4cb239f10e1801e43f0874a4f637def5daaee (diff) | |
download | cru-fa6e9a419f688df12a57199aa3b4dce10cc6fd49.tar.gz cru-fa6e9a419f688df12a57199aa3b4dce10cc6fd49.tar.bz2 cru-fa6e9a419f688df12a57199aa3b4dce10cc6fd49.zip |
...
-rw-r--r-- | include/cru/ui/components/PopupButton.h | 31 | ||||
-rw-r--r-- | src/theme_builder/components/conditions/CompoundConditonEditor.cpp | 11 | ||||
-rw-r--r-- | src/theme_builder/components/conditions/ConditionEditor.h | 5 | ||||
-rw-r--r-- | src/ui/components/PopupButton.cpp | 24 |
4 files changed, 70 insertions, 1 deletions
diff --git a/include/cru/ui/components/PopupButton.h b/include/cru/ui/components/PopupButton.h new file mode 100644 index 00000000..f8c545bf --- /dev/null +++ b/include/cru/ui/components/PopupButton.h @@ -0,0 +1,31 @@ +#pragma once +#include "Component.h" +#include "cru/ui/components/Menu.h" +#include "cru/ui/controls/Button.h" +#include "cru/ui/controls/Popup.h" +#include "cru/ui/controls/TextBlock.h" + +namespace cru::ui::components { +class PopupMenuTextButton : public Component { + public: + PopupMenuTextButton(); + ~PopupMenuTextButton() override; + + public: + ui::controls::Control* GetRootControl() override { return &button_; } + + String GetButtonText() { return button_text_.GetText(); } + void SetButtonText(String text) { button_text_.SetText(std::move(text)); } + + void SetMenuItems(std::vector<String> items); + + IEvent<Index>* MenuItemSelectedEvent() { return &menu_item_selected_event_; } + + private: + ui::controls::Button button_; + ui::controls::TextBlock button_text_; + PopupMenu popup_menu_; + + Event<Index> menu_item_selected_event_; +}; +} // namespace cru::ui::components diff --git a/src/theme_builder/components/conditions/CompoundConditonEditor.cpp b/src/theme_builder/components/conditions/CompoundConditonEditor.cpp index 812c27dc..96daa20b 100644 --- a/src/theme_builder/components/conditions/CompoundConditonEditor.cpp +++ b/src/theme_builder/components/conditions/CompoundConditonEditor.cpp @@ -1,4 +1,6 @@ #include "CompoundConditionEditor.h" +#include "cru/common/ClonablePtr.h" +#include "cru/ui/style/Condition.h" namespace cru::theme_builder::components::conditions { CompoundConditionEditorChild::CompoundConditionEditorChild( @@ -26,4 +28,13 @@ CompoundConditionEditor::CompoundConditionEditor() { CompoundConditionEditor::~CompoundConditionEditor() {} +std::vector<ClonablePtr<ui::style::Condition>> +CompoundConditionEditor::GetChildren() { + std::vector<ClonablePtr<ui::style::Condition>> children; + for (auto& child : children_) { + children.push_back(child->GetConditionEditor()->GetCondition()); + } + return children; +} + } // namespace cru::theme_builder::components::conditions diff --git a/src/theme_builder/components/conditions/ConditionEditor.h b/src/theme_builder/components/conditions/ConditionEditor.h index 0bbaa6ed..64d5a19e 100644 --- a/src/theme_builder/components/conditions/ConditionEditor.h +++ b/src/theme_builder/components/conditions/ConditionEditor.h @@ -1,13 +1,14 @@ #pragma once +#include "cru/common/ClonablePtr.h" #include "cru/ui/components/Component.h" #include "cru/ui/controls/FlexLayout.h" #include "cru/ui/controls/TextBlock.h" +#include "cru/ui/style/Condition.h" namespace cru::theme_builder::components::conditions { class ConditionEditor : public ui::components::Component { public: ConditionEditor(); - ~ConditionEditor() override; public: @@ -18,6 +19,8 @@ class ConditionEditor : public ui::components::Component { String GetLabel() const { return label_.GetText(); } void SetLabel(String label) { label_.SetText(std::move(label)); } + virtual ClonablePtr<ui::style::Condition> GetCondition() = 0; + private: ui::controls::FlexLayout container_; ui::controls::TextBlock label_; 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<String> 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 |