diff options
author | louis <louis.braun@gmx.de> | 2015-01-20 09:29:16 +0100 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-01-20 09:29:16 +0100 |
commit | 3bcda748cd72927a5a43cc33b7bf864994be8659 (patch) | |
tree | 846b7859519bbe2b9ec31877d1a8f70e76aac671 /libcore | |
parent | f72a1856cb51db1efa3c799c1e489a152026566b (diff) | |
download | vdr-plugin-skindesigner-3bcda748cd72927a5a43cc33b7bf864994be8659.tar.gz vdr-plugin-skindesigner-3bcda748cd72927a5a43cc33b7bf864994be8659.tar.bz2 |
adapted plugin setup to support skin setups
Diffstat (limited to 'libcore')
-rw-r--r-- | libcore/skinsetup.c | 134 | ||||
-rw-r--r-- | libcore/skinsetup.h | 37 | ||||
-rw-r--r-- | libcore/skinsetupparameter.c | 21 | ||||
-rw-r--r-- | libcore/skinsetupparameter.h | 31 |
4 files changed, 151 insertions, 72 deletions
diff --git a/libcore/skinsetup.c b/libcore/skinsetup.c index a1484f3..ceeb687 100644 --- a/libcore/skinsetup.c +++ b/libcore/skinsetup.c @@ -1,10 +1,40 @@ #include "skinsetup.h" #include "../libtemplate/xmlparser.h" +// --- cSkinSetupParameter ----------------------------------------------------------- + +cSkinSetupParameter::cSkinSetupParameter(void) { + type = sptUnknown; + name = ""; + displayText = ""; + min = 0; + max = 1000; + value = 0; +} + +void cSkinSetupParameter::Debug(void) { + string sType = "unknown"; + if (type == sptBool) + sType = "bool"; + else if (type == sptInt) + sType = "int"; + dsyslog("skindesigner: name \"%s\", type %s, displayText \"%s\", Value %d", name.c_str(), sType.c_str(), displayText.c_str(), value); + if (type == sptInt) + dsyslog("skindesigner: min %d, max %d", min, max); +} + +// --- cSkinSetup ----------------------------------------------------------- + cSkinSetup::cSkinSetup(string skin) { this->skin = skin; } +cSkinSetup::~cSkinSetup() { + for (map < string, cSkinSetupParameter* >::iterator p = parameters.begin(); p != parameters.end(); p++) { + delete p->second; + } +} + bool cSkinSetup::ReadFromXML(void) { string xmlFile = "setup.xml"; cXmlParser parser; @@ -30,22 +60,39 @@ void cSkinSetup::SetParameter(xmlChar *type, xmlChar *name, xmlChar* displayText esyslog("skindesigner: invalid setup parameter for skin %s", skin.c_str()); return; } - cSkinSetupParameter param; - param.type = paramType; - param.name = (const char*)name; - param.displayText = (const char*)displayText; + + cSkinSetupParameter *param = new cSkinSetupParameter(); + param->type = paramType; + param->name = (const char*)name; + param->displayText = (const char*)displayText; if (min && paramType == sptInt) { - param.min = atoi((const char*)min); + param->min = atoi((const char*)min); } if (max && paramType == sptInt) { - param.max = atoi((const char*)max); + param->max = atoi((const char*)max); } - param.value = atoi((const char*)value); + param->value = atoi((const char*)value); + + parameters.insert(pair< string, cSkinSetupParameter* >(param->name, param)); +} - parameters.insert(pair<string, cSkinSetupParameter>(param.name, param)); +cSkinSetupParameter *cSkinSetup::GetParameter(void) { + if (paramIt == parameters.end()) + return NULL; + cSkinSetupParameter *param = paramIt->second; + paramIt++; + return param; } +cSkinSetupParameter *cSkinSetup::GetParameter(string name) { + map < string, cSkinSetupParameter* >::iterator hit = parameters.find(name); + if (hit != parameters.end()) + return hit->second; + return NULL; +} + + void cSkinSetup::SetTranslation(string translationToken, map < string, string > transl) { translations.insert(pair<string, map < string, string > >(translationToken, transl)); } @@ -53,19 +100,73 @@ void cSkinSetup::SetTranslation(string translationToken, map < string, string > void cSkinSetup::AddToGlobals(cGlobals *globals) { if (!globals) return; - for (map<string, cSkinSetupParameter>::iterator p = parameters.begin(); p != parameters.end(); p++) { - string paramName = p->first; - cSkinSetupParameter param = p->second; - globals->intVars.erase(paramName); - globals->intVars.insert(pair<string,int>(paramName, param.value)); + for (map < string, cSkinSetupParameter* >::iterator p = parameters.begin(); p != parameters.end(); p++) { + cSkinSetupParameter *param = p->second; + globals->intVars.erase(param->name); + globals->intVars.insert(pair<string,int>(param->name, param->value)); } } +void cSkinSetup::TranslateSetup(void) { + InitParameterIterator(); + cSkinSetupParameter *param = NULL; + while (param = GetParameter()) { + string transl = ""; + if (Translate(param->displayText, transl)) { + param->displayText = transl; + } + } +} + +bool cSkinSetup::Translate(string text, string &translation) { + string transStart = "{tr("; + string transEnd = ")}"; + size_t foundStart = text.find(transStart); + size_t foundEnd = text.find(transEnd); + bool translated = false; + + while (foundStart != string::npos && foundEnd != string::npos) { + string token = text.substr(foundStart + 1, foundEnd - foundStart); + string transToken = DoTranslate(token); + if (transToken.size() > 0) + translated = true; + else + return false; + text.replace(foundStart, foundEnd - foundStart + 2, transToken); + foundStart = text.find(transStart); + foundEnd = text.find(transEnd); + } + if (translated) + translation = text; + return translated; +} + +string cSkinSetup::DoTranslate(string token) { + string translation = ""; + map <string, map< string, string > >::iterator hit = translations.find(token); + if (hit == translations.end()) { + esyslog("skindesigner: invalid translation token %s", token.c_str()); + return translation; + } + map< string, string > translats = hit->second; + map< string, string >::iterator trans = translats.find(Setup.OSDLanguage); + if (trans != translats.end()) { + translation = trans->second; + } else { + map< string, string >::iterator transDefault = translats.find("en_EN"); + if (transDefault != translats.end()) { + translation = transDefault->second; + } + } + return translation; +} + void cSkinSetup::Debug(void) { dsyslog("skindesigner: Skin \"%s\" Setup Parameters", skin.c_str()); - for (map<string, cSkinSetupParameter>::iterator p = parameters.begin(); p != parameters.end(); p++) { - (p->second).Debug(); + for (map < string, cSkinSetupParameter* >::iterator p = parameters.begin(); p != parameters.end(); p++) { + (p->second)->Debug(); } + dsyslog("skindesigner: Skin \"%s\" Setup Parameter Translations", skin.c_str()); for (map<string, map<string,string> >::iterator trans = translations.begin(); trans != translations.end(); trans++) { dsyslog("skindesigner: translation token %s", (trans->first).c_str()); @@ -73,5 +174,6 @@ void cSkinSetup::Debug(void) { for (map<string,string>::iterator trans2 = transValues.begin(); trans2 != transValues.end(); trans2++) { dsyslog("skindesigner: translation language %s value \"%s\"", (trans2->first).c_str(), (trans2->second).c_str()); } - } + } + } diff --git a/libcore/skinsetup.h b/libcore/skinsetup.h index e5fcdc8..4b0082d 100644 --- a/libcore/skinsetup.h +++ b/libcore/skinsetup.h @@ -9,24 +9,53 @@ #include <vdr/plugin.h> #include <libxml/xmlstring.h> #include "../libtemplate/globals.h" -#include "skinsetupparameter.h" using namespace std; +enum eSetupParameterType { + sptInt, + sptBool, + sptUnknown +}; + +// --- cSkinSetupParameter ----------------------------------------------------------- + +class cSkinSetupParameter { +private: +public: + cSkinSetupParameter(void); + virtual ~cSkinSetupParameter(void) {}; + eSetupParameterType type; + string name; + string displayText; + int min; + int max; + int value; + void Debug(void); +}; + // --- cSkinSetup ----------------------------------------------------------- class cSkinSetup { private: string skin; - map <string, cSkinSetupParameter> parameters; - map <string, map< string, string > > translations; + map < string, cSkinSetupParameter* > parameters; + map < string, cSkinSetupParameter* >::iterator paramIt; + map < string, map< string, string > > translations; + string DoTranslate(string token); + bool Translate(string text, string &translation); public: cSkinSetup(string skin); - virtual ~cSkinSetup(void) {}; + virtual ~cSkinSetup(void); bool ReadFromXML(void); void SetParameter(xmlChar *type, xmlChar *name, xmlChar* displayText, xmlChar *min, xmlChar *max, xmlChar *value); void SetTranslation(string translationToken, map < string, string > transl); void AddToGlobals(cGlobals *globals); + void TranslateSetup(void); + void InitParameterIterator(void) { paramIt = parameters.begin(); }; + cSkinSetupParameter *GetParameter(void); + cSkinSetupParameter *GetParameter(string name); + string GetSkin(void) { return skin; }; void Debug(void); }; diff --git a/libcore/skinsetupparameter.c b/libcore/skinsetupparameter.c deleted file mode 100644 index e6c3672..0000000 --- a/libcore/skinsetupparameter.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "skinsetupparameter.h" - -cSkinSetupParameter::cSkinSetupParameter(void) { - type = sptUnknown; - name = ""; - displayText = ""; - min = 0; - max = 1000; - value = 0; -} - -void cSkinSetupParameter::Debug(void) { - string sType = "unknown"; - if (type == sptBool) - sType = "bool"; - else if (type == sptInt) - sType = "int"; - dsyslog("skindesigner: name \"%s\", type %s, displayText \"%s\", Value %d", name.c_str(), sType.c_str(), displayText.c_str(), value); - if (type == sptInt) - dsyslog("skindesigner: min %d, max %d", min, max); -}
\ No newline at end of file diff --git a/libcore/skinsetupparameter.h b/libcore/skinsetupparameter.h deleted file mode 100644 index d038159..0000000 --- a/libcore/skinsetupparameter.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __SKINSETUPPARAMETER_H -#define __SKINSETUPPARAMETER_H - -#include <string> -#include <vdr/plugin.h> - -using namespace std; - -enum eSetupParameterType { - sptInt, - sptBool, - sptUnknown -}; - -// --- cSkinSetupParameter ----------------------------------------------------------- - -class cSkinSetupParameter { -private: -public: - cSkinSetupParameter(void); - virtual ~cSkinSetupParameter(void) {}; - eSetupParameterType type; - string name; - string displayText; - int min; - int max; - int value; - void Debug(void); -}; - -#endif //__SKINSETUPPARAMETER_H
\ No newline at end of file |