diff options
-rw-r--r-- | xbmc/peripherals/Peripherals.cpp | 52 | ||||
-rw-r--r-- | xbmc/peripherals/devices/Peripheral.cpp | 10 | ||||
-rw-r--r-- | xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp | 28 | ||||
-rw-r--r-- | xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h | 1 |
4 files changed, 71 insertions, 20 deletions
diff --git a/xbmc/peripherals/Peripherals.cpp b/xbmc/peripherals/Peripherals.cpp index 14041f29d9..46ddb0368e 100644 --- a/xbmc/peripherals/Peripherals.cpp +++ b/xbmc/peripherals/Peripherals.cpp @@ -41,6 +41,7 @@ #include "guilib/LocalizeStrings.h" #include "dialogs/GUIDialogKaiToast.h" #include "utils/StringUtils.h" +#include "Util.h" #include "guilib/Key.h" using namespace PERIPHERALS; @@ -486,29 +487,46 @@ void CPeripherals::GetSettingsFromMappingsFile(TiXmlElement *xmlNode, map<CStdSt 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); } - //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; + 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"); } diff --git a/xbmc/peripherals/devices/Peripheral.cpp b/xbmc/peripherals/devices/Peripheral.cpp index 31fcb0e91c..31367c5fd7 100644 --- a/xbmc/peripherals/devices/Peripheral.cpp +++ b/xbmc/peripherals/devices/Peripheral.cpp @@ -211,7 +211,15 @@ void CPeripheral::AddSetting(const CStdString &strKey, const CSetting *setting) case SETTINGS_TYPE_INT: { const CSettingInt *mappedSetting = (const CSettingInt *) setting; - CSettingInt *intSetting = new CSettingInt(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_iMin, mappedSetting->m_iStep, mappedSetting->m_iMax, mappedSetting->GetControlType(), mappedSetting->m_strFormat); + CSettingInt *intSetting(NULL); + if (mappedSetting->GetControlType() == SPIN_CONTROL_INT) + { + intSetting = new CSettingInt(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_iMin, mappedSetting->m_iStep, mappedSetting->m_iMax, mappedSetting->GetControlType(), mappedSetting->m_strFormat); + } + else if (mappedSetting->GetControlType() == SPIN_CONTROL_TEXT) + { + intSetting = new CSettingInt(mappedSetting->GetOrder(), strKey.c_str(), mappedSetting->GetLabel(), mappedSetting->GetData(), mappedSetting->m_entries, mappedSetting->GetControlType()); + } if (intSetting) { intSetting->SetVisible(mappedSetting->IsVisible()); diff --git a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp index cc801efb49..02856ba444 100644 --- a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp +++ b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp @@ -51,6 +51,7 @@ void CGUIDialogPeripheralSettings::SetFileItem(CFileItemPtr item) delete m_item; m_boolSettings.clear(); m_intSettings.clear(); + m_intTextSettings.clear(); m_floatSettings.clear(); m_stringSettings.clear(); m_settings.clear(); @@ -96,8 +97,23 @@ void CGUIDialogPeripheralSettings::CreateSettings() CSettingInt *intSetting = (CSettingInt *) setting; if (intSetting) { - 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); + 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; @@ -160,6 +176,13 @@ void CGUIDialogPeripheralSettings::UpdatePeripheralSettings(void) ++intItr; } + map<CStdString, int>::iterator intTextItr = m_intTextSettings.begin(); + while (intTextItr != m_intTextSettings.end()) + { + peripheral->SetSetting((*intTextItr).first, (*intTextItr).second); + ++intTextItr; + } + map<CStdString, float>::iterator floatItr = m_floatSettings.begin(); while (floatItr != m_floatSettings.end()) { @@ -210,6 +233,7 @@ void CGUIDialogPeripheralSettings::ResetDefaultSettings(void) /* clear the settings */ m_boolSettings.clear(); m_intSettings.clear(); + m_intTextSettings.clear(); m_floatSettings.clear(); m_stringSettings.clear(); m_settings.clear(); diff --git a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h index 9511e842ba..997c5d7904 100644 --- a/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h +++ b/xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h @@ -44,6 +44,7 @@ namespace PERIPHERALS bool m_bIsInitialising; std::map<CStdString, bool> m_boolSettings; std::map<CStdString, float> m_intSettings; + std::map<CStdString, int> m_intTextSettings; std::map<CStdString, float> m_floatSettings; std::map<CStdString, CStdString> m_stringSettings; }; |