const CStdString &CGUISettings::GetString(const char *strSetting, bool bPrompt) const { ASSERT(settingsMap.size()); constMapIter it = settingsMap.find(CStdString(strSetting).ToLower()); if (it != settingsMap.end()) { CSettingString* result = ((CSettingString *)(*it).second); if (result->GetData() == "select folder" || result->GetData() == "select writable folder") { CStdString strData = ""; if (bPrompt) { VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetDirectory(shares,g_localizeStrings.Get(result->GetLabel()),strData,result->GetData() == "select writable folder")) { result->SetData(strData); g_settings.Save(); } else return StringUtils::EmptyString; } else return StringUtils::EmptyString; } return result->GetData(); } // Assert here and write debug output CLog::Log(LOGDEBUG,"Error: Requested setting (%s) was not found. It must be case-sensitive", strSetting); //ASSERT(false); // hardcoded return value so that compiler is happy return StringUtils::EmptyString; }
const CStdString CPeripheral::GetSettingString(const CStdString &strKey) const { map<CStdString, CSetting *>::const_iterator it = m_settings.find(strKey); if (it != m_settings.end() && (*it).second->GetType() == SETTINGS_TYPE_STRING) { CSettingString *stringSetting = (CSettingString *) (*it).second; if (stringSetting) return stringSetting->GetData(); } return StringUtils::EmptyString; }
void CPeripheral::PersistSettings(void) const { TiXmlDocument doc; TiXmlElement node("settings"); doc.InsertEndChild(node); for (map<CStdString, CSetting *>::const_iterator itr = m_settings.begin(); itr != m_settings.end(); itr++) { TiXmlElement nodeSetting("setting"); nodeSetting.SetAttribute("id", itr->first.c_str()); CStdString strValue; switch ((*itr).second->GetType()) { case SETTINGS_TYPE_STRING: { CSettingString *stringSetting = (CSettingString *) (*itr).second; if (stringSetting) strValue = stringSetting->GetData(); } break; case SETTINGS_TYPE_INT: { CSettingInt *intSetting = (CSettingInt *) (*itr).second; if (intSetting) strValue.Format("%d", intSetting->GetData()); } break; case SETTINGS_TYPE_FLOAT: { CSettingFloat *floatSetting = (CSettingFloat *) (*itr).second; if (floatSetting) strValue.Format("%.2f", floatSetting->GetData()); } break; case SETTINGS_TYPE_BOOL: { CSettingBool *boolSetting = (CSettingBool *) (*itr).second; if (boolSetting) strValue.Format("%d", boolSetting->GetData() ? 1:0); } break; default: break; } nodeSetting.SetAttribute("value", strValue.c_str()); doc.RootElement()->InsertEndChild(nodeSetting); } doc.SaveFile(m_strSettingsFile); }
void CPeripheral::SetSetting(const CStdString &strKey, const CStdString &strValue) { map<CStdString, CSetting *>::iterator it = m_settings.find(strKey); if (it != m_settings.end()) { if ((*it).second->GetType() == SETTINGS_TYPE_STRING) { CSettingString *stringSetting = (CSettingString *) (*it).second; if (stringSetting) { bool bChanged(!stringSetting->GetData().Equals(strValue)); stringSetting->SetData(strValue); if (bChanged && m_bInitialised) OnSettingChanged(strKey); } } else if ((*it).second->GetType() == SETTINGS_TYPE_INT) SetSetting(strKey, (int) (strValue.IsEmpty() ? 0 : atoi(strValue.c_str()))); else if ((*it).second->GetType() == SETTINGS_TYPE_FLOAT) SetSetting(strKey, (float) (strValue.IsEmpty() ? 0 : atof(strValue.c_str()))); else if ((*it).second->GetType() == SETTINGS_TYPE_BOOL) SetSetting(strKey, strValue.Equals("1")); } }
void CGUIDialogPeripheralSettings::CreateSettings() { m_bIsInitialising = true; m_usePopupSliders = g_SkinInfo->HasSkinFile("DialogSlider.xml"); if (m_item) { CPeripheral *peripheral = g_peripherals.GetByPath(m_item->GetPath()); if (peripheral) { vector<CSetting *> settings = peripheral->GetSettings(); for (size_t iPtr = 0; iPtr < settings.size(); iPtr++) { CSetting *setting = settings[iPtr]; if (!setting->IsVisible()) { CLog::Log(LOGDEBUG, "%s - invisible", __FUNCTION__); continue; } switch(setting->GetType()) { case SETTINGS_TYPE_BOOL: { CSettingBool *boolSetting = (CSettingBool *) setting; if (boolSetting) { m_boolSettings.insert(make_pair(CStdString(boolSetting->GetSetting()), boolSetting->GetData())); AddBool(boolSetting->GetOrder(), boolSetting->GetLabel(), &m_boolSettings[boolSetting->GetSetting()], true); } } break; case SETTINGS_TYPE_INT: { CSettingInt *intSetting = (CSettingInt *) setting; if (intSetting) { if (intSetting->GetControlType() == SPIN_CONTROL_INT) { m_intSettings.insert(make_pair(CStdString(intSetting->GetSetting()), (float) intSetting->GetData())); AddSlider(intSetting->GetOrder(), intSetting->GetLabel(), &m_intSettings[intSetting->GetSetting()], (float)intSetting->m_iMin, (float)intSetting->m_iStep, (float)intSetting->m_iMax, CGUIDialogVideoSettings::FormatInteger, false); } else if (intSetting->GetControlType() == SPIN_CONTROL_TEXT) { m_intTextSettings.insert(make_pair(CStdString(intSetting->GetSetting()), intSetting->GetData())); vector<pair<int, int> > entries; map<int, int>::iterator entriesItr = intSetting->m_entries.begin(); while (entriesItr != intSetting->m_entries.end()) { entries.push_back(make_pair(entriesItr->first, entriesItr->second)); ++entriesItr; } AddSpin(intSetting->GetOrder(), intSetting->GetLabel(), &m_intTextSettings[intSetting->GetSetting()], entries); } } } break; case SETTINGS_TYPE_FLOAT: { CSettingFloat *floatSetting = (CSettingFloat *) setting; if (floatSetting) { m_floatSettings.insert(make_pair(CStdString(floatSetting->GetSetting()), floatSetting->GetData())); AddSlider(floatSetting->GetOrder(), floatSetting->GetLabel(), &m_floatSettings[floatSetting->GetSetting()], floatSetting->m_fMin, floatSetting->m_fStep, floatSetting->m_fMax, CGUIDialogVideoSettings::FormatFloat, false); } } break; case SETTINGS_TYPE_STRING: { CSettingString *stringSetting = (CSettingString *) setting; if (stringSetting) { m_stringSettings.insert(make_pair(CStdString(stringSetting->GetSetting()), stringSetting->GetData())); AddString(stringSetting->GetOrder(), stringSetting->GetLabel(), &m_stringSettings[stringSetting->GetSetting()]); } } break; default: //TODO add more types if needed CLog::Log(LOGDEBUG, "%s - unknown type", __FUNCTION__); break; } } } else { CLog::Log(LOGDEBUG, "%s - no peripheral", __FUNCTION__); } } m_bIsInitialising = false; }