summaryrefslogtreecommitdiff
path: root/libcore
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-01-20 09:29:16 +0100
committerlouis <louis.braun@gmx.de>2015-01-20 09:29:16 +0100
commit3bcda748cd72927a5a43cc33b7bf864994be8659 (patch)
tree846b7859519bbe2b9ec31877d1a8f70e76aac671 /libcore
parentf72a1856cb51db1efa3c799c1e489a152026566b (diff)
downloadvdr-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.c134
-rw-r--r--libcore/skinsetup.h37
-rw-r--r--libcore/skinsetupparameter.c21
-rw-r--r--libcore/skinsetupparameter.h31
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