aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/mapper/style/ConditionMapper.h
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-12-15 21:27:33 +0800
committerYuqian Yang <crupest@crupest.life>2025-12-15 21:27:33 +0800
commitc77072d586bf7aca58e6465ceab3d11a0be0021f (patch)
tree83605be90fd32104ef74bbd1d84d900aaf0271ce /include/cru/ui/mapper/style/ConditionMapper.h
parentbc3fa9650699046f3a87a620282ee43f26b2fa75 (diff)
downloadcru-c77072d586bf7aca58e6465ceab3d11a0be0021f.tar.gz
cru-c77072d586bf7aca58e6465ceab3d11a0be0021f.tar.bz2
cru-c77072d586bf7aca58e6465ceab3d11a0be0021f.zip
Clean up mapper codes.
Diffstat (limited to 'include/cru/ui/mapper/style/ConditionMapper.h')
-rw-r--r--include/cru/ui/mapper/style/ConditionMapper.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/include/cru/ui/mapper/style/ConditionMapper.h b/include/cru/ui/mapper/style/ConditionMapper.h
new file mode 100644
index 00000000..a7bddefb
--- /dev/null
+++ b/include/cru/ui/mapper/style/ConditionMapper.h
@@ -0,0 +1,41 @@
+#pragma once
+#include "../../Base.h"
+#include "../../style/Condition.h"
+#include "../Mapper.h"
+
+#include <cru/base/ClonePtr.h>
+#include <cru/base/xml/XmlNode.h>
+
+namespace cru::ui::mapper::style {
+using ui::style::Condition;
+
+struct CRU_UI_API IConditionMapper : virtual Interface {
+ virtual bool XmlElementIsOfThisType(xml::XmlElementNode* node) = 0;
+ virtual ClonePtr<Condition> MapConditionFromXml(
+ xml::XmlElementNode* node) = 0;
+};
+
+#define CRU_DECLARE_CONDITION_MAPPER(condition_name) \
+ using ui::style::condition_name##Condition; \
+ class CRU_UI_API condition_name##ConditionMapper \
+ : public BasicClonePtrMapper<condition_name##Condition>, \
+ public virtual IConditionMapper { \
+ CRU_UI_DECLARE_CAN_MAP_FROM_XML_ELEMENT_TAG( \
+ condition_name##Condition, ClonePtr<condition_name##Condition>) \
+ \
+ ClonePtr<Condition> MapConditionFromXml( \
+ xml::XmlElementNode* node) override { \
+ return MapFromXml(node); \
+ } \
+ };
+
+CRU_DECLARE_CONDITION_MAPPER(No)
+CRU_DECLARE_CONDITION_MAPPER(And)
+CRU_DECLARE_CONDITION_MAPPER(Or)
+CRU_DECLARE_CONDITION_MAPPER(ClickState)
+CRU_DECLARE_CONDITION_MAPPER(Checked)
+CRU_DECLARE_CONDITION_MAPPER(Focus)
+CRU_DECLARE_CONDITION_MAPPER(Hover)
+
+#undef CRU_DECLARE_CONDITION_MAPPER
+} // namespace cru::ui::mapper::style