CSettingDependencyConditionCombinationPtr CSettingDependency::Or() { if (m_operation == NULL) m_operation = CBooleanLogicOperationPtr(new CSettingDependencyConditionCombination(m_settingsManager)); m_operation->SetOperation(BooleanLogicOperationOr); return std::dynamic_pointer_cast<CSettingDependencyConditionCombination>(m_operation); }
bool CBooleanLogic::Deserialize(const TiXmlNode *node) { if (node == NULL) return false; if (m_operation == NULL) { m_operation = CBooleanLogicOperationPtr(new CBooleanLogicOperation()); if (m_operation == NULL) return false; } return m_operation->Deserialize(node); }
bool CBooleanLogicOperation::Deserialize(const TiXmlNode *node) { if (node == NULL) return false; // check if this is a simple operation with a single value directly expressed // in the parent tag if (node->FirstChild() == NULL || node->FirstChild()->Type() == TiXmlNode::TINYXML_TEXT) { CBooleanLogicValuePtr value = CBooleanLogicValuePtr(newValue()); if (value == NULL || !value->Deserialize(node)) { CLog::Log(LOGDEBUG, "CBooleanLogicOperation: failed to deserialize implicit boolean value definition"); return false; } m_values.push_back(value); return true; } const TiXmlNode *operationNode = node->FirstChild(); while (operationNode != NULL) { std::string tag = operationNode->ValueStr(); if (StringUtils::EqualsNoCase(tag, "and") || StringUtils::EqualsNoCase(tag, "or")) { CBooleanLogicOperationPtr operation = CBooleanLogicOperationPtr(newOperation()); if (operation == NULL) return false; operation->SetOperation(StringUtils::EqualsNoCase(tag, "and") ? BooleanLogicOperationAnd : BooleanLogicOperationOr); if (!operation->Deserialize(operationNode)) { CLog::Log(LOGDEBUG, "CBooleanLogicOperation: failed to deserialize <%s> definition", tag.c_str()); return false; } m_operations.push_back(operation); } else { CBooleanLogicValuePtr value = CBooleanLogicValuePtr(newValue()); if (value == NULL) return false; if (StringUtils::EqualsNoCase(tag, value->GetTag())) { if (!value->Deserialize(operationNode)) { CLog::Log(LOGDEBUG, "CBooleanLogicOperation: failed to deserialize <%s> definition", tag.c_str()); return false; } m_values.push_back(value); } else if (operationNode->Type() == TiXmlNode::TINYXML_ELEMENT) CLog::Log(LOGDEBUG, "CBooleanLogicOperation: unknown <%s> definition encountered", tag.c_str()); } operationNode = operationNode->NextSibling(); } return true; }
CSettingRequirement::CSettingRequirement(CSettingsManager *settingsManager /* = nullptr */) : CSettingCondition(settingsManager) { m_operation = CBooleanLogicOperationPtr(new CSettingRequirementConditionCombination(m_settingsManager)); }
CSettingDependency::CSettingDependency(SettingDependencyType type, CSettingsManager *settingsManager /* = NULL */) : CSettingCondition(settingsManager), m_type(type) { m_operation = CBooleanLogicOperationPtr(new CSettingDependencyConditionCombination(m_settingsManager)); }
CSettingVisibility::CSettingVisibility(CSettingsManager *settingsManager /* = NULL */) : CSettingCondition(settingsManager) { m_operation = CBooleanLogicOperationPtr(new CSettingVisibilityConditionCombination(m_settingsManager)); }
CSettingCondition::CSettingCondition(CSettingsManager *settingsManager /* = nullptr */) : ISettingCondition(settingsManager) { m_operation = CBooleanLogicOperationPtr(new CSettingConditionCombination(settingsManager)); }
CSettingCategoryAccess::CSettingCategoryAccess(CSettingsManager *settingsManager /* = NULL */) : CSettingCondition(settingsManager) { m_operation = CBooleanLogicOperationPtr(new CSettingCategoryAccessConditionCombination(m_settingsManager)); }