#pragma once #include "../Base.h" #include "Condition.h" #include "Styler.h" #include "cru/base/ClonablePtr.h" 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, std::string name = {}) { return ClonablePtr(new StyleRule( std::move(condition), std::move(styler), std::move(name))); } StyleRule(ClonablePtr condition, ClonablePtr styler, std::string name = {}); CRU_DEFAULT_COPY(StyleRule) CRU_DEFAULT_MOVE(StyleRule) ~StyleRule() override = default; public: std::string GetName() const { return name_; } Condition* GetCondition() const { return condition_.get(); } Styler* GetStyler() const { return styler_.get(); } StyleRule WithNewCondition(ClonablePtr condition, std::string name = {}) const { return StyleRule{std::move(condition), styler_, std::move(name)}; } StyleRule WithNewStyler(ClonablePtr styler, std::string name = {}) const { return StyleRule{condition_, std::move(styler), std::move(name)}; } bool CheckAndApply(controls::Control* control) const; private: ClonablePtr condition_; ClonablePtr styler_; std::string name_; }; } // namespace cru::ui::style