void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdString, CSetting *> &m_settings) { TiXmlElement *currentNode = xmlNode->FirstChildElement("setting"); while (currentNode) { CSetting *setting = NULL; CStdString strKey(currentNode->Attribute("key")); if (strKey.IsEmpty()) continue; CStdString strSettingsType(currentNode->Attribute("type")); int iLabelId = currentNode->Attribute("label") ? atoi(currentNode->Attribute("label")) : -1; bool bConfigurable = (!currentNode->Attribute("configurable") || strcmp(currentNode->Attribute("configurable"), "") == 0 || (strcmp(currentNode->Attribute("configurable"), "no") != 0 && strcmp(currentNode->Attribute("configurable"), "false") != 0 && strcmp(currentNode->Attribute("configurable"), "0") != 0)); if (strSettingsType.Equals("bool")) { bool bValue = (strcmp(currentNode->Attribute("value"), "no") != 0 && strcmp(currentNode->Attribute("value"), "false") != 0 && strcmp(currentNode->Attribute("value"), "0") != 0); setting = new CSettingBool(0, strKey, iLabelId, bValue, CHECKMARK_CONTROL); } else if (strSettingsType.Equals("int")) { int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0; int iMin = currentNode->Attribute("min") ? atoi(currentNode->Attribute("min")) : 0; int iStep = currentNode->Attribute("step") ? atoi(currentNode->Attribute("step")) : 1; int iMax = currentNode->Attribute("max") ? atoi(currentNode->Attribute("max")) : 255; CStdString strFormat(currentNode->Attribute("format")); setting = new CSettingInt(0, strKey, iLabelId, iValue, iMin, iStep, iMax, SPIN_CONTROL_INT, strFormat); } else if (strSettingsType.Equals("float")) { float fValue = currentNode->Attribute("value") ? (float) atof(currentNode->Attribute("value")) : 0; float fMin = currentNode->Attribute("min") ? (float) atof(currentNode->Attribute("min")) : 0; float fStep = currentNode->Attribute("step") ? (float) atof(currentNode->Attribute("step")) : 0; float fMax = currentNode->Attribute("max") ? (float) atof(currentNode->Attribute("max")) : 0; setting = new CSettingFloat(0, strKey, iLabelId, fValue, fMin, fStep, fMax, SPIN_CONTROL_FLOAT); } else { CStdString strValue(currentNode->Attribute("value")); setting = new CSettingString(0, strKey, iLabelId, strValue, EDIT_CONTROL_INPUT, !bConfigurable, -1); } //TODO add more types if needed setting->SetVisible(bConfigurable); m_settings[strKey] = setting; currentNode = currentNode->NextSiblingElement("setting"); } }
void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, std::map<std::string, PeripheralDeviceSetting> &settings) { TiXmlElement *currentNode = xmlNode->FirstChildElement("setting"); int iMaxOrder = 0; while (currentNode) { CSetting *setting = nullptr; std::string strKey = XMLUtils::GetAttribute(currentNode, "key"); if (strKey.empty()) continue; std::string strSettingsType = XMLUtils::GetAttribute(currentNode, "type"); int iLabelId = currentNode->Attribute("label") ? atoi(currentNode->Attribute("label")) : -1; const std::string config = XMLUtils::GetAttribute(currentNode, "configurable"); bool bConfigurable = (config.empty() || (config != "no" && config != "false" && config != "0")); if (strSettingsType == "bool") { const std::string value = XMLUtils::GetAttribute(currentNode, "value"); bool bValue = (value != "no" && value != "false" && value != "0"); setting = new CSettingBool(strKey, iLabelId, bValue); } else if (strSettingsType == "int") { int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0; int iMin = currentNode->Attribute("min") ? atoi(currentNode->Attribute("min")) : 0; int iStep = currentNode->Attribute("step") ? atoi(currentNode->Attribute("step")) : 1; int iMax = currentNode->Attribute("max") ? atoi(currentNode->Attribute("max")) : 255; setting = new CSettingInt(strKey, iLabelId, iValue, iMin, iStep, iMax); } else if (strSettingsType == "float") { float fValue = currentNode->Attribute("value") ? (float) atof(currentNode->Attribute("value")) : 0; float fMin = currentNode->Attribute("min") ? (float) atof(currentNode->Attribute("min")) : 0; float fStep = currentNode->Attribute("step") ? (float) atof(currentNode->Attribute("step")) : 0; float fMax = currentNode->Attribute("max") ? (float) atof(currentNode->Attribute("max")) : 0; setting = new CSettingNumber(strKey, iLabelId, fValue, fMin, fStep, fMax); } else if (StringUtils::EqualsNoCase(strSettingsType, "enum")) { std::string strEnums = XMLUtils::GetAttribute(currentNode, "lvalues"); if (!strEnums.empty()) { std::vector< std::pair<int,int> > enums; std::vector<std::string> valuesVec; StringUtils::Tokenize(strEnums, valuesVec, "|"); for (unsigned int i = 0; i < valuesVec.size(); i++) enums.push_back(std::make_pair(atoi(valuesVec[i].c_str()), atoi(valuesVec[i].c_str()))); int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0; setting = new CSettingInt(strKey, iLabelId, iValue, enums); } } else { std::string strValue = XMLUtils::GetAttribute(currentNode, "value"); setting = new CSettingString(strKey, iLabelId, strValue); } if (setting) { //! @todo add more types if needed /* set the visibility */ setting->SetVisible(bConfigurable); /* set the order */ int iOrder = 0; currentNode->Attribute("order", &iOrder); /* if the order attribute is invalid or 0, then the setting will be added at the end */ if (iOrder < 0) iOrder = 0; if (iOrder > iMaxOrder) iMaxOrder = iOrder; /* and add this new setting */ PeripheralDeviceSetting deviceSetting = { setting, iOrder }; settings[strKey] = deviceSetting; } currentNode = currentNode->NextSiblingElement("setting"); } /* add the settings without an order attribute or an invalid order attribute set at the end */ for (auto& it : settings) { if (it.second.m_order == 0) it.second.m_order = ++iMaxOrder; } }
void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdString, CSetting *> &m_settings) { TiXmlElement *currentNode = xmlNode->FirstChildElement("setting"); int iMaxOrder(0); while (currentNode) { CSetting *setting = NULL; CStdString strKey(currentNode->Attribute("key")); if (strKey.IsEmpty()) continue; CStdString strSettingsType(currentNode->Attribute("type")); int iLabelId = currentNode->Attribute("label") ? atoi(currentNode->Attribute("label")) : -1; bool bConfigurable = (!currentNode->Attribute("configurable") || strcmp(currentNode->Attribute("configurable"), "") == 0 || (strcmp(currentNode->Attribute("configurable"), "no") != 0 && strcmp(currentNode->Attribute("configurable"), "false") != 0 && strcmp(currentNode->Attribute("configurable"), "0") != 0)); if (strSettingsType.Equals("bool")) { bool bValue = (strcmp(currentNode->Attribute("value"), "no") != 0 && strcmp(currentNode->Attribute("value"), "false") != 0 && strcmp(currentNode->Attribute("value"), "0") != 0); setting = new CSettingBool(0, strKey, iLabelId, bValue, CHECKMARK_CONTROL); } else if (strSettingsType.Equals("int")) { int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0; int iMin = currentNode->Attribute("min") ? atoi(currentNode->Attribute("min")) : 0; int iStep = currentNode->Attribute("step") ? atoi(currentNode->Attribute("step")) : 1; int iMax = currentNode->Attribute("max") ? atoi(currentNode->Attribute("max")) : 255; CStdString strFormat(currentNode->Attribute("format")); setting = new CSettingInt(0, strKey, iLabelId, iValue, iMin, iStep, iMax, SPIN_CONTROL_INT, strFormat); } else if (strSettingsType.Equals("float")) { float fValue = currentNode->Attribute("value") ? (float) atof(currentNode->Attribute("value")) : 0; float fMin = currentNode->Attribute("min") ? (float) atof(currentNode->Attribute("min")) : 0; float fStep = currentNode->Attribute("step") ? (float) atof(currentNode->Attribute("step")) : 0; float fMax = currentNode->Attribute("max") ? (float) atof(currentNode->Attribute("max")) : 0; setting = new CSettingFloat(0, strKey, iLabelId, fValue, fMin, fStep, fMax, SPIN_CONTROL_FLOAT); } else if (strSettingsType.Equals("enum")) { CStdString strEnums(currentNode->Attribute("lvalues")); if (!strEnums.IsEmpty()) { map<int,int> enums; vector<CStdString> valuesVec; CUtil::Tokenize(strEnums, valuesVec, "|"); for (unsigned int i = 0; i < valuesVec.size(); i++) enums.insert(make_pair(atoi(valuesVec[i]), atoi(valuesVec[i]))); int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0; setting = new CSettingInt(0, strKey, iLabelId, iValue, enums, SPIN_CONTROL_TEXT); } } else { CStdString strValue(currentNode->Attribute("value")); setting = new CSettingString(0, strKey, iLabelId, strValue, EDIT_CONTROL_INPUT, !bConfigurable, -1); } if (setting) { //TODO add more types if needed /* set the visibility */ setting->SetVisible(bConfigurable); /* set the order */ int iOrder(0); currentNode->Attribute("order", &iOrder); /* if the order attribute is invalid or 0, then the setting will be added at the end */ if (iOrder < 0) iOrder = 0; setting->SetOrder(iOrder); if (iOrder > iMaxOrder) iMaxOrder = iOrder; /* and add this new setting */ m_settings[strKey] = setting; } currentNode = currentNode->NextSiblingElement("setting"); } /* add the settings without an order attribute or an invalid order attribute set at the end */ for (map<CStdString, CSetting *>::iterator it = m_settings.begin(); it != m_settings.end(); it++) { if (it->second->GetOrder() == 0) it->second->SetOrder(++iMaxOrder); } }
void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdString, CSetting *> &m_settings) { TiXmlElement *currentNode = xmlNode->FirstChildElement("setting"); while (currentNode) { CSetting *setting = NULL; CStdString strKey(currentNode->Attribute("key")); if (strKey.empty()) continue; CStdString strSettingsType(currentNode->Attribute("type")); int iLabelId = currentNode->Attribute("label") ? atoi(currentNode->Attribute("label")) : -1; bool bConfigurable = (!currentNode->Attribute("configurable") || strcmp(currentNode->Attribute("configurable"), "") == 0 || (strcmp(currentNode->Attribute("configurable"), "no") != 0 && strcmp(currentNode->Attribute("configurable"), "false") != 0 && strcmp(currentNode->Attribute("configurable"), "0") != 0)); if (strSettingsType.Equals("bool")) { bool bValue = (strcmp(currentNode->Attribute("value"), "no") != 0 && strcmp(currentNode->Attribute("value"), "false") != 0 && strcmp(currentNode->Attribute("value"), "0") != 0); setting = new CSettingBool(strKey, iLabelId, bValue); } else if (strSettingsType.Equals("int")) { int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0; int iMin = currentNode->Attribute("min") ? atoi(currentNode->Attribute("min")) : 0; int iStep = currentNode->Attribute("step") ? atoi(currentNode->Attribute("step")) : 1; int iMax = currentNode->Attribute("max") ? atoi(currentNode->Attribute("max")) : 255; setting = new CSettingInt(strKey, iLabelId, iValue, iMin, iStep, iMax); } else if (strSettingsType.Equals("float")) { float fValue = currentNode->Attribute("value") ? (float) atof(currentNode->Attribute("value")) : 0; float fMin = currentNode->Attribute("min") ? (float) atof(currentNode->Attribute("min")) : 0; float fStep = currentNode->Attribute("step") ? (float) atof(currentNode->Attribute("step")) : 0; float fMax = currentNode->Attribute("max") ? (float) atof(currentNode->Attribute("max")) : 0; setting = new CSettingNumber(strKey, iLabelId, fValue, fMin, fStep, fMax); } else if (strSettingsType.Equals("enum")) { CStdString strEnums(currentNode->Attribute("lvalues")); if (!strEnums.empty()) { vector< pair<int,int> > enums; vector<std::string> valuesVec; StringUtils::Tokenize(strEnums, valuesVec, "|"); for (unsigned int i = 0; i < valuesVec.size(); i++) enums.push_back(make_pair(atoi(valuesVec[i].c_str()), atoi(valuesVec[i].c_str()))); int iValue = currentNode->Attribute("value") ? atoi(currentNode->Attribute("value")) : 0; setting = new CSettingInt(strKey, iLabelId, iValue, enums); } } else { CStdString strValue(currentNode->Attribute("value")); setting = new CSettingString(strKey, iLabelId, strValue); } if (setting) { //TODO add more types if needed /* set the visibility */ setting->SetVisible(bConfigurable); /* and add this new setting */ m_settings[strKey] = setting; } currentNode = currentNode->NextSiblingElement("setting"); } }