aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/ButtonTranslator.cpp65
-rw-r--r--xbmc/ButtonTranslator.h10
2 files changed, 26 insertions, 49 deletions
diff --git a/xbmc/ButtonTranslator.cpp b/xbmc/ButtonTranslator.cpp
index e554712e04..9749295a89 100644
--- a/xbmc/ButtonTranslator.cpp
+++ b/xbmc/ButtonTranslator.cpp
@@ -591,8 +591,6 @@ void CButtonTranslator::MapJoystickActions(int windowID, TiXmlNode *pJoystick)
// CLog::Log(LOGDEBUG, "Found Joystick map for window %d using %s", windowID, it->c_str());
it++;
}
-
- return;
}
bool CButtonTranslator::TranslateJoystickString(int window, const char* szDevice, int id, short inputType, int& action, CStdString& strAction, bool &fullrange)
@@ -756,27 +754,15 @@ void CButtonTranslator::MapAction(uint32_t buttonCode, const char *szAction, but
}
}
-enum CButtonTranslator::ButtonDeviceType CButtonTranslator::GetDeviceType(TiXmlNode *pWindow)
+bool CButtonTranslator::HasDeviceType(TiXmlNode *pWindow, CStdString type)
{
- TiXmlNode *firstChild = pWindow->FirstChild();
- if (firstChild != NULL)
- {
- const char *value = firstChild->Value();
- if (value == "gamepad")
- return Gamepad;
- if (value == "remote")
- return Remote;
- if (value == "universalremote")
- return UniversalRemote;
- if (value == "keyboard")
- return Keyboard;
- }
- return Unknown;
+ return pWindow->FirstChild(type) != NULL;
}
void CButtonTranslator::MapWindowActions(TiXmlNode *pWindow, int windowID)
{
- if (!pWindow || windowID == WINDOW_INVALID) return;
+ if (!pWindow || windowID == WINDOW_INVALID)
+ return;
buttonMap map;
std::map<int, buttonMap>::iterator it = translatorMap.find(windowID);
if (it != translatorMap.end())
@@ -785,32 +771,31 @@ void CButtonTranslator::MapWindowActions(TiXmlNode *pWindow, int windowID)
translatorMap.erase(it);
}
TiXmlNode* pDevice;
- ButtonDeviceType remoteType = GetDeviceType(pWindow);
- if (remoteType != Unknown)
+
+ const char* types[] = {"gamepad", "remote", "keyboard", "universalremote", NULL};
+ for (int i = 0; types[i]; ++i)
{
- pDevice = pWindow->FirstChild();
- TiXmlElement *pButton = pDevice->FirstChildElement();
- while (pButton)
+ CStdString type(types[i]);
+ if (HasDeviceType(pWindow, type))
{
- uint32_t buttonCode;
- switch (remoteType)
+ pDevice = pWindow->FirstChild(type);
+ TiXmlElement *pButton = pDevice->FirstChildElement();
+ while (pButton)
{
- case Gamepad:
- buttonCode = TranslateGamepadString(pButton->Value());
- break;
- case Remote:
- buttonCode = TranslateRemoteString(pButton->Value());
- break;
- case UniversalRemote:
- buttonCode = TranslateUniversalRemoteString(pButton->Value());
- break;
- case Keyboard:
- buttonCode = TranslateKeyboardButton(pButton);
- break;
+ uint32_t buttonCode;
+ if (type == "gamepad")
+ buttonCode = TranslateGamepadString(pButton->Value());
+ else if (type == "remote")
+ buttonCode = TranslateRemoteString(pButton->Value());
+ else if (type == "universalremote")
+ buttonCode = TranslateUniversalRemoteString(pButton->Value());
+ else if (type == "keyboard")
+ buttonCode = TranslateKeyboardButton(pButton);
+
+ if (buttonCode && pButton->FirstChild())
+ MapAction(buttonCode, pButton->FirstChild()->Value(), map);
+ pButton = pButton->NextSiblingElement();
}
- if (buttonCode && pButton->FirstChild())
- MapAction(buttonCode, pButton->FirstChild()->Value(), map);
- pButton = pButton->NextSiblingElement();
}
}
#if defined(HAS_SDL_JOYSTICK) || defined(HAS_EVENT_SERVER)
diff --git a/xbmc/ButtonTranslator.h b/xbmc/ButtonTranslator.h
index 08c012218c..112c3902ed 100644
--- a/xbmc/ButtonTranslator.h
+++ b/xbmc/ButtonTranslator.h
@@ -59,15 +59,7 @@ private:
CButtonTranslator(const CButtonTranslator&);
CButtonTranslator const& operator=(CButtonTranslator const&);
virtual ~CButtonTranslator();
- enum ButtonDeviceType
- {
- Unknown,
- Gamepad,
- Remote,
- Keyboard,
- UniversalRemote
- };
- enum ButtonDeviceType GetDeviceType(TiXmlNode *pWindow);
+ bool HasDeviceType(TiXmlNode *pWindow, CStdString type);
public:
///access to singleton
static CButtonTranslator& GetInstance();