#pragma once #include "../Base.h" #include "Condition.h" #include "Styler.h" #include "cru/common/ClonablePtr.h" #include #include namespace cru::ui::style { /** * \brief An immutable style rule contains a condition and a styler. * \remarks This class is immutable and has value semantics. */ class CRU_UI_API StyleRule : public Object { public: static ClonablePtr Create(ClonablePtr condition, ClonablePtr styler, String name = {}) { return ClonablePtr(new StyleRule( std::move(condition), std::move(styler), std::move(name))); } StyleRule(ClonablePtr condition, ClonablePtr styler, String name = {}); CRU_DEFAULT_COPY(StyleRule) CRU_DEFAULT_MOVE(StyleRule) ~StyleRule() override = default; public: String GetName() const { return name_; } Condition* GetCondition() const { return condition_.get(); } Styler* GetStyler() const { return styler_.get(); } StyleRule WithNewCondition(ClonablePtr condition, String name = {}) const { return StyleRule{std::move(condition), styler_, std::move(name)}; } StyleRule WithNewStyler(ClonablePtr styler, String name = {}) const { return StyleRule{condition_, std::move(styler), std::move(name)}; } bool CheckAndApply(controls::Control* control) const; private: ClonablePtr condition_; ClonablePtr styler_; String name_; }; } // namespace cru::ui::style