aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/peripherals/Peripherals.cpp52
-rw-r--r--xbmc/peripherals/devices/Peripheral.cpp10
-rw-r--r--xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp28
-rw-r--r--xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.h1
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;
};