diff options
Diffstat (limited to 'src/theme_builder')
10 files changed, 57 insertions, 13 deletions
diff --git a/src/theme_builder/CMakeLists.txt b/src/theme_builder/CMakeLists.txt index a0597d7b..cbd180bf 100644 --- a/src/theme_builder/CMakeLists.txt +++ b/src/theme_builder/CMakeLists.txt @@ -8,6 +8,7 @@ add_executable(cru_theme_builder components/conditions/CompoundConditionEditor.cpp components/conditions/ConditionEditor.cpp components/conditions/FocusConditionEditor.cpp + components/conditions/NoConditionEditor.cpp components/properties/CheckBoxPropertyEditor.cpp components/properties/ColorPropertyEditor.cpp components/properties/CornerRadiusPropertyEditor.cpp diff --git a/src/theme_builder/components/MainWindow.cpp b/src/theme_builder/components/MainWindow.cpp index 59e2dae8..d2a4c765 100644 --- a/src/theme_builder/components/MainWindow.cpp +++ b/src/theme_builder/components/MainWindow.cpp @@ -23,6 +23,9 @@ MainWindow::MainWindow() { style_rule_set_editor_.BindStyleRuleSet( preview_button_.GetStyleRuleSet()->GetParent()); main_layout_.AddChild(style_rule_set_editor_.GetRootControl()); + + main_layout_.SetChildLayoutData(0, {0, 0}); + main_layout_.SetChildLayoutData(1, {1, 1}); } MainWindow::~MainWindow() {} diff --git a/src/theme_builder/components/StyleRuleSetEditor.cpp b/src/theme_builder/components/StyleRuleSetEditor.cpp index 57671776..b5e6de91 100644 --- a/src/theme_builder/components/StyleRuleSetEditor.cpp +++ b/src/theme_builder/components/StyleRuleSetEditor.cpp @@ -6,6 +6,9 @@ namespace cru::theme_builder { using namespace cru::ui::controls; StyleRuleSetEditor::StyleRuleSetEditor() { + scroll_view_.SetChild(&container_); + + rules_layout_.SetFlexDirection(ui::controls::FlexDirection::Vertical); container_.AddChild(&rules_layout_); container_.AddChild(&add_button_); @@ -13,7 +16,7 @@ StyleRuleSetEditor::StyleRuleSetEditor() { add_button_text_.SetText(u"+"); add_button_.ClickEvent()->AddSpyOnlyHandler([this] { - auto rule_set = ui::style::StyleRule(ui::style::AndCondition::Create({}), + auto rule_set = ui::style::StyleRule(ui::style::NoCondition::Create(), ui::style::CompoundStyler::Create({})); style_rule_set_->AddStyleRule(rule_set); style_rule_editors_.push_back(std::make_unique<StyleRuleEditor>()); @@ -22,7 +25,7 @@ StyleRuleSetEditor::StyleRuleSetEditor() { }); } -StyleRuleSetEditor::~StyleRuleSetEditor() { rules_layout_.RemoveFromParent(); } +StyleRuleSetEditor::~StyleRuleSetEditor() { scroll_view_.RemoveFromParent(); } void StyleRuleSetEditor::BindStyleRuleSet( std::shared_ptr<ui::style::StyleRuleSet> rule_set) { diff --git a/src/theme_builder/components/StyleRuleSetEditor.h b/src/theme_builder/components/StyleRuleSetEditor.h index cb77d71e..c58a7a3d 100644 --- a/src/theme_builder/components/StyleRuleSetEditor.h +++ b/src/theme_builder/components/StyleRuleSetEditor.h @@ -4,6 +4,7 @@ #include "cru/ui/controls/Button.h" #include "cru/ui/controls/Control.h" #include "cru/ui/controls/FlexLayout.h" +#include "cru/ui/controls/ScrollView.h" #include "cru/ui/style/StyleRuleSet.h" namespace cru::theme_builder { @@ -17,13 +18,14 @@ class StyleRuleSetEditor : public ui::components::Component { ~StyleRuleSetEditor() override; public: - ui::controls::Control* GetRootControl() override { return &container_; } + ui::controls::Control* GetRootControl() override { return &scroll_view_; } void BindStyleRuleSet(std::shared_ptr<ui::style::StyleRuleSet> rule_set); private: std::shared_ptr<ui::style::StyleRuleSet> style_rule_set_; + ui::controls::ScrollView scroll_view_; ui::controls::FlexLayout container_; ui::controls::FlexLayout rules_layout_; std::vector<std::unique_ptr<StyleRuleEditor>> style_rule_editors_; diff --git a/src/theme_builder/components/conditions/CompoundConditionEditor.cpp b/src/theme_builder/components/conditions/CompoundConditionEditor.cpp index c53b2b69..b4f0b458 100644 --- a/src/theme_builder/components/conditions/CompoundConditionEditor.cpp +++ b/src/theme_builder/components/conditions/CompoundConditionEditor.cpp @@ -3,6 +3,7 @@ #include "ClickStateConditionEditor.h" #include "ConditionEditor.h" #include "FocusConditionEditor.h" +#include "NoConditionEditor.h" #include "cru/common/ClonablePtr.h" #include "cru/ui/style/Condition.h" @@ -32,13 +33,9 @@ CompoundConditionEditor::CompoundConditionEditor() { GetContainer()->AddChild(&children_container_); GetContainer()->AddChild(add_child_button_.GetRootControl()); add_child_button_.SetButtonText(u"+"); - add_child_button_.SetMenuItems({ - u"And Condtion", - u"Or Condtion", - u"Click State Condtion", - u"Focus Condtion", - u"Checked Condtion", - }); + add_child_button_.SetMenuItems({u"And Condition", u"Or Condition", + u"Click State Condition", u"Focus Condition", + u"Checked Condition", u"No Condition"}); add_child_button_.MenuItemSelectedEvent()->AddHandler([this](Index index) { std::unique_ptr<ConditionEditor> editor; switch (index) { @@ -57,6 +54,9 @@ CompoundConditionEditor::CompoundConditionEditor() { case 4: editor = std::make_unique<CheckedConditionEditor>(); break; + case 5: + editor = std::make_unique<NoConditionEditor>(); + break; default: break; } diff --git a/src/theme_builder/components/conditions/ConditionEditor.cpp b/src/theme_builder/components/conditions/ConditionEditor.cpp index f5edf674..8ffd33a5 100644 --- a/src/theme_builder/components/conditions/ConditionEditor.cpp +++ b/src/theme_builder/components/conditions/ConditionEditor.cpp @@ -3,6 +3,8 @@ #include "ClickStateConditionEditor.h" #include "CompoundConditionEditor.h" #include "FocusConditionEditor.h" +#include "NoConditionEditor.h" +#include "cru/common/Exception.h" #include "cru/ui/controls/FlexLayout.h" namespace cru::theme_builder::components::conditions { @@ -24,6 +26,10 @@ std::unique_ptr<ConditionEditor> CreateConditionEditor( auto result = std::make_unique<OrConditionEditor>(); result->SetValue(or_condition); return result; + } else if (auto no_condition = + dynamic_cast<ui::style::NoCondition*>(condition)) { + auto result = std::make_unique<NoConditionEditor>(); + return result; } else if (auto click_state_condition = dynamic_cast<ui::style::ClickStateCondition*>(condition)) { auto result = std::make_unique<ClickStateConditionEditor>(); @@ -40,7 +46,7 @@ std::unique_ptr<ConditionEditor> CreateConditionEditor( result->SetValue(checked_condition); return result; } else { - return nullptr; + throw Exception(u"Unknown condition type"); } } } // namespace cru::theme_builder::components::conditions diff --git a/src/theme_builder/components/conditions/NoConditionEditor.cpp b/src/theme_builder/components/conditions/NoConditionEditor.cpp new file mode 100644 index 00000000..a5087159 --- /dev/null +++ b/src/theme_builder/components/conditions/NoConditionEditor.cpp @@ -0,0 +1,7 @@ +#include "NoConditionEditor.h" + +namespace cru::theme_builder::components::conditions { +NoConditionEditor::NoConditionEditor() { SetLabel(u"No condition"); } + +NoConditionEditor::~NoConditionEditor() {} +} // namespace cru::theme_builder::components::conditions diff --git a/src/theme_builder/components/conditions/NoConditionEditor.h b/src/theme_builder/components/conditions/NoConditionEditor.h new file mode 100644 index 00000000..da5f99b0 --- /dev/null +++ b/src/theme_builder/components/conditions/NoConditionEditor.h @@ -0,0 +1,22 @@ +#pragma once +#include "ConditionEditor.h" +#include "cru/common/ClonablePtr.h" +#include "cru/ui/style/Condition.h" + +namespace cru::theme_builder::components::conditions { +class NoConditionEditor : public ConditionEditor { + public: + NoConditionEditor(); + ~NoConditionEditor() override; + + public: + ClonablePtr<ui::style::Condition> GetCondition() override { + return ui::style::NoCondition::Create(); + } + + IEvent<std::nullptr_t>* ChangeEvent() override { return &change_event_; } + + private: + Event<std::nullptr_t> change_event_; +}; +} // namespace cru::theme_builder::components::conditions diff --git a/src/theme_builder/components/stylers/CompoundStylerEditor.cpp b/src/theme_builder/components/stylers/CompoundStylerEditor.cpp index 27a29c59..69fd0824 100644 --- a/src/theme_builder/components/stylers/CompoundStylerEditor.cpp +++ b/src/theme_builder/components/stylers/CompoundStylerEditor.cpp @@ -14,7 +14,7 @@ CompoundStylerEditorChild::CompoundStylerEditorChild( remove_button_.SetChild(&remove_button_text_); remove_button_text_.SetText(u"-"); - container_.AddChild(editor->GetRootControl()); + container_.AddChild(styler_editor_->GetRootControl()); remove_button_.ClickEvent()->AddSpyOnlyHandler( [this] { this->remove_event_.Raise(nullptr); }); diff --git a/src/theme_builder/components/stylers/StylerEditor.cpp b/src/theme_builder/components/stylers/StylerEditor.cpp index 9c7852d4..4f3238e2 100644 --- a/src/theme_builder/components/stylers/StylerEditor.cpp +++ b/src/theme_builder/components/stylers/StylerEditor.cpp @@ -28,7 +28,7 @@ std::unique_ptr<StylerEditor> CreateStylerEditor(ui::style::Styler* styler) { editor->SetValue(cursor_styler); return editor; } else { - return nullptr; + throw Exception(u"Unknown styler type"); } } } // namespace cru::theme_builder::components::stylers |