#include "cru/ui/mapper/style/AndConditionMapper.h" #include "cru/common/ClonablePtr.h" #include "cru/ui/mapper/MapperRegistry.h" #include "cru/ui/mapper/style/IConditionMapper.h" #include "cru/ui/style/Condition.h" #include "cru/xml/XmlNode.h" namespace cru::ui::mapper::style { bool AndConditionMapper::XmlElementIsOfThisType(xml::XmlElementNode *node) { return node->GetTag().CaseInsensitiveEqual(u"AndCondition"); } ClonablePtr AndConditionMapper::DoMapFromXml( xml::XmlElementNode *node) { std::vector> conditions; auto condition_mappers = MapperRegistry::GetInstance()->GetMappersByInterface(); for (auto child : node->GetChildren()) { if (child->GetType() == xml::XmlNode::Type::Element) { auto c = child->AsElement(); for (auto mapper : condition_mappers) { if (mapper->XmlElementIsOfThisType(c)) { conditions.push_back(mapper->MapConditionFromXml(c)); break; } } } } return ui::style::AndCondition::Create(std::move(conditions)); } } // namespace cru::ui::mapper::style