diff options
author | louis <louis.braun@gmx.de> | 2015-01-24 10:47:47 +0100 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-01-24 10:47:47 +0100 |
commit | a74cb93163146e547abc641638874697904672e5 (patch) | |
tree | 5ade879d4ad7808cfb8eca6ad2bd40636a4fa22b | |
parent | 5733a499407a11b095887e06df09c4e5d6debeda (diff) | |
download | vdr-plugin-skindesigner-a74cb93163146e547abc641638874697904672e5.tar.gz vdr-plugin-skindesigner-a74cb93163146e547abc641638874697904672e5.tar.bz2 |
introduced globals.xml in skinpath, theme.xml in theme path
23 files changed, 400 insertions, 471 deletions
@@ -175,3 +175,6 @@ Version 0.1.6 - fixed bug that onpause view potentially starts during setting cutting marks +- made all globals variables private +- introduced globals.xml in skinpath, theme.xml in theme path. theme.xml + adds its vakues and potentially overrides valués from globals.xml
\ No newline at end of file @@ -146,17 +146,9 @@ bool cSkinDesigner::SetCustomToken(string option) { return true; if (isNumber(val)) { - map<string, int>::iterator hit = globals->customIntTokens.find(key); - if (hit != globals->customIntTokens.end()) { - globals->customIntTokens.erase(key); - } - globals->customIntTokens.insert(pair<string,int>(key, atoi(val.c_str()))); + globals->AddCustomInt(key, atoi(val.c_str())); } else { - map<string, string>::iterator hit = globals->customStringTokens.find(key); - if (hit != globals->customStringTokens.end()) { - globals->customStringTokens.erase(key); - } - globals->customStringTokens.insert(pair<string,string>(key, val)); + globals->AddCustomString(key, val); } return true; } @@ -164,13 +156,7 @@ bool cSkinDesigner::SetCustomToken(string option) { void cSkinDesigner::ListCustomTokens(void) { if (!globals) return; - - for (map<string, string>::iterator it = globals->customStringTokens.begin(); it != globals->customStringTokens.end(); it++) { - dsyslog("skindesigner: custom string token \"%s\" = \"%s\"", (it->first).c_str(), (it->second).c_str()); - } - for (map<string, int>::iterator it = globals->customIntTokens.begin(); it != globals->customIntTokens.end(); it++) { - dsyslog("skindesigner: custom int token \"%s\" = \"%d\"", (it->first).c_str(), it->second); - } + globals->ListCustomTokens(); } /********************************************************************************* diff --git a/dtd/globals.dtd b/dtd/globals.dtd index e6246d6..d7a463c 100644 --- a/dtd/globals.dtd +++ b/dtd/globals.dtd @@ -1,6 +1,6 @@ <?xml encoding="UTF-8"?>
-<!ELEMENT globals (colors,variables,translations,fonts)>
+<!ELEMENT globals (colors | variables | translations | fonts)*>
<!ELEMENT colors (color)*>
<!ELEMENT variables (var)*>
<!ELEMENT translations (token)*>
diff --git a/libcore/helpers.c b/libcore/helpers.c index 4da97f7..3e08e11 100644 --- a/libcore/helpers.c +++ b/libcore/helpers.c @@ -90,6 +90,12 @@ bool isNumber(const string& s) { return !s.empty() && it == s.end(); } +bool IsToken(const string& token) { + if ((token.find("{") == 0) && (token.find("}") == (token.size()-1))) + return true; + return false; +} + bool FileExists(const string &fullpath) { struct stat buffer; return (stat (fullpath.c_str(), &buffer) == 0); diff --git a/libcore/helpers.h b/libcore/helpers.h index abfae6d..cfcd70d 100644 --- a/libcore/helpers.h +++ b/libcore/helpers.h @@ -12,6 +12,7 @@ int Minimum(int a, int b, int c, int d, int e, int f); std::string CutText(string &text, int width, string fontName, int fontSize); std::string StrToLowerCase(string str); bool isNumber(const string& s); +bool IsToken(const string& token); bool FileExists(const string &fullpath); bool FileExists(const string &path, const string &name, const string &ext); bool FolderExists(const string &path); diff --git a/libcore/skinsetup.c b/libcore/skinsetup.c index ceeb687..d678243 100644 --- a/libcore/skinsetup.c +++ b/libcore/skinsetup.c @@ -102,8 +102,7 @@ void cSkinSetup::AddToGlobals(cGlobals *globals) { return; 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)); + globals->AddInt(param->name, param->value); } } diff --git a/libtemplate/globals.c b/libtemplate/globals.c index 9a94b4f..36e2c19 100644 --- a/libtemplate/globals.c +++ b/libtemplate/globals.c @@ -1,5 +1,6 @@ #include "globals.h" #include "xmlparser.h" +#include "../config.h" #include <locale.h> cGlobals::cGlobals(void) { @@ -11,15 +12,134 @@ cGlobals::cGlobals(void) { } bool cGlobals::ReadFromXML(void) { + //globals.xml is mandatory string xmlFile = "globals.xml"; cXmlParser parser; - if (!parser.ReadGlobals(this, xmlFile)) + if (!parser.ReadGlobals(this, xmlFile, true)) return false; if (!parser.ParseGlobals()) return false; + //theme.xml is optional + xmlFile = "theme.xml"; + if (parser.ReadGlobals(this, xmlFile, false)) { + parser.ParseGlobals(); + } return true; } +void cGlobals::AddColor(string &name, tColor &col) { + colors.erase(name); + colors.insert(pair<string, tColor>(name, col)); +} + +bool cGlobals::GetColor(string &name, tColor &col) { + int size = name.size(); + if (size < 2) + return false; + string nameCutted = name.substr(1, size-2); + map <string, tColor>::iterator hit = colors.find(nameCutted); + if (hit != colors.end()) { + col = hit->second; + return true; + } + return false; +} + +void cGlobals::AddFont(string &name, string &font) { + fonts.erase(name); + fonts.insert(pair<string, string>(name, font)); +} + +bool cGlobals::GetFont(string name, string &font) { + int size = name.size(); + if (size < 2) + return false; + string nameCutted = name.substr(1, size-2); + map<string,string>::iterator hit = fonts.find(nameCutted); + if (hit != fonts.end()) { + font = hit->second; + return true; + } + return false; +} + +void cGlobals::AddInt(string &name, int value) { + intVars.erase(name); + intVars.insert(pair<string, int>(name, value)); +} + +void cGlobals::ReplaceIntVars(string &value) { + for (map<string, int>::iterator it = intVars.begin(); it != intVars.end(); it++) { + stringstream sToken; + sToken << "{" << it->first << "}"; + string token = sToken.str(); + size_t foundToken = value.find(token); + if (foundToken != string::npos) { + stringstream st; + st << it->second; + value = value.replace(foundToken, token.size(), st.str()); + } + } +} + +bool cGlobals::GetInt(string name, int &val) { + map < string, int >::iterator hit = intVars.find(name); + if (hit != intVars.end()) { + val = hit->second; + return true; + } + return false; +} + +void cGlobals::AddDouble(string &name, string &value) { + doubleVars.erase(name); + if (config.replaceDecPoint) { + if (value.find_first_of('.') != string::npos) { + std::replace( value.begin(), value.end(), '.', config.decPoint); + } + } + double val = atof(value.c_str()); + doubleVars.insert(pair<string, double>(name, val)); +} + +void cGlobals::ReplaceDoubleVars(string &value) { + for (map<string, double>::iterator it = doubleVars.begin(); it != doubleVars.end(); it++) { + stringstream sToken; + sToken << "{" << it->first << "}"; + string token = sToken.str(); + size_t foundToken = value.find(token); + if (foundToken != string::npos) { + stringstream st; + st << it->second; + string doubleVal = st.str(); + value = value.replace(foundToken, token.size(), doubleVal); + } + } +} + +void cGlobals::AddString(string &name, string &value) { + stringVars.erase(name); + stringVars.insert(pair<string, string>(name, value)); +} + +void cGlobals::ReplaceStringVars(string &value) { + for (map<string,string>::iterator it = stringVars.begin(); it != stringVars.end(); it++) { + stringstream sToken; + sToken << "{" << it->first << "}"; + string token = sToken.str(); + size_t foundToken = value.find(token); + if (foundToken != string::npos) { + value = value.replace(foundToken, token.size(), it->second); + } + } + +} + +bool cGlobals::AddTranslation(string name, map < string, string > transl) { + translations.erase(name); + translations.insert(pair<string, map < string, string > >(name, transl)); +} + bool cGlobals::Translate(string text, string &translation) { string transStart = "{tr("; string transEnd = ")}"; @@ -63,6 +183,34 @@ string cGlobals::DoTranslate(string token) { return translation; } +void cGlobals::AddCustomInt(string &name, int value) { + customIntTokens.erase(name); + customIntTokens.insert(pair<string,int>(name, value)); +} + +void cGlobals::AddCustomString(string &name, string &value) { + customStringTokens.erase(name); + customStringTokens.insert(pair<string,string>(name, value)); +} + +bool cGlobals::GetCustomInt(string name, int &val) { + map < string, int >::iterator hit = customIntTokens.find(name); + if (hit != customIntTokens.end()) { + val = hit->second; + return true; + } + return false; +} + +void cGlobals::ListCustomTokens(void) { + for (map<string, string>::iterator it = customStringTokens.begin(); it != customStringTokens.end(); it++) { + dsyslog("skindesigner: custom string token \"%s\" = \"%s\"", (it->first).c_str(), (it->second).c_str()); + } + for (map<string, int>::iterator it = customIntTokens.begin(); it != customIntTokens.end(); it++) { + dsyslog("skindesigner: custom int token \"%s\" = \"%d\"", (it->first).c_str(), it->second); + } +} + void cGlobals::Debug(void) { dsyslog("skindesigner: GLOBAL VARIABLES"); for (map <string, tColor>::iterator col = colors.begin(); col != colors.end(); col++) { @@ -80,7 +228,7 @@ void cGlobals::Debug(void) { for (map <string, string>::iterator font = fonts.begin(); font != fonts.end(); font++) { dsyslog("skindesigner: Font \"%s\": \"%s\"", (font->first).c_str(), (font->second).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()); map< string, string > tokenTrans = trans->second; @@ -88,5 +236,4 @@ void cGlobals::Debug(void) { dsyslog("skindesigner: language %s, translation %s", (transTok->first).c_str(), (transTok->second).c_str()); } } - */ } diff --git a/libtemplate/globals.h b/libtemplate/globals.h index 17f5242..9629e63 100644 --- a/libtemplate/globals.h +++ b/libtemplate/globals.h @@ -22,19 +22,37 @@ class cGlobals { private: string language; string DoTranslate(string token); -public: - cGlobals(void); - virtual ~cGlobals(void) {}; map <string, tColor> colors; + map <string, string> fonts; map <string, int> intVars; map <string, double> doubleVars; map <string, string> stringVars; - map <string, string> fonts; map <string, map< string, string > > translations; map <string, string> customStringTokens; map <string, int> customIntTokens; +public: + cGlobals(void); + virtual ~cGlobals(void) {}; bool ReadFromXML(void); + void AddColor(string &name, tColor &col); + bool GetColor(string &name, tColor &col); + void AddFont(string &name, string &font); + bool GetFont(string name, string &font); + void AddInt(string &name, int value); + void ReplaceIntVars(string &value); + bool GetInt(string name, int &val); + void AddDouble(string &name, string &value); + void ReplaceDoubleVars(string &value); + void AddString(string &name, string &value); + void ReplaceStringVars(string &value); + bool AddTranslation(string name, map < string, string > transl); bool Translate(string text, string &translation); + void AddCustomInt(string &name, int value); + void AddCustomString(string &name, string &value); + bool GetCustomInt(string name, int &val); + map <string, string> GetCustomStringTokens(void) { return customStringTokens; }; + map <string, int> GetCustomIntTokens(void) { return customIntTokens; }; + void ListCustomTokens(void); void Debug(void); }; diff --git a/libtemplate/parameter.c b/libtemplate/parameter.c index 83597c8..1479014 100644 --- a/libtemplate/parameter.c +++ b/libtemplate/parameter.c @@ -146,34 +146,8 @@ bool cNumericParameter::CheckExpression(int &val, string &parsedVal) { } if (globals) { - for (map<string, int>::iterator globInt = globals->intVars.begin(); globInt != globals->intVars.end(); globInt++) { - stringstream sToken; - sToken << "{" << globInt->first << "}"; - string token = sToken.str(); - size_t foundToken = parsedValue.find(token); - if (foundToken != string::npos) { - stringstream st; - st << globInt->second; - parsedValue = parsedValue.replace(foundToken, token.size(), st.str()); - } - } - for (map<string, double>::iterator globDouble = globals->doubleVars.begin(); globDouble != globals->doubleVars.end(); globDouble++) { - stringstream sToken; - sToken << "{" << globDouble->first << "}"; - string token = sToken.str(); - size_t foundToken = parsedValue.find(token); - if (foundToken != string::npos) { - stringstream st; - st << globDouble->second; - string doubleVal = st.str(); - if (config.replaceDecPoint) { - if (doubleVal.find_first_of('.') != string::npos) { - std::replace( doubleVal.begin(), doubleVal.end(), '.', config.decPoint); - } - } - parsedValue = parsedValue.replace(foundToken, token.size(), doubleVal); - } - } + globals->ReplaceIntVars(parsedValue); + globals->ReplaceDoubleVars(parsedValue); } if (IsNumber(parsedValue)) { @@ -339,15 +313,12 @@ bool cConditionalParameter::Evaluate(map < string, int > *intTokens, map < strin int cConditionalParameter::EvaluateParameter(string token, map < string, int > *intTokens, map < string, string > *stringTokens) { //first check globals - map < string, int >::iterator hitGlobals = globals->intVars.find(token); - if (hitGlobals != globals->intVars.end()) { - return hitGlobals->second; - } + int result = 0; + if (globals->GetInt(token, result)) + return result; //then check custom tokens - map < string, int >::iterator hitCustomTokens = globals->customIntTokens.find(token); - if (hitCustomTokens != globals->customIntTokens.end()) { - return hitCustomTokens->second; - } + if (globals->GetCustomInt(token, result)) + return result; //then check tokens if (intTokens) { map < string, int >::iterator hit = intTokens->find(token); diff --git a/libtemplate/templatefunction.c b/libtemplate/templatefunction.c index 80cf762..0b3de8a 100644 --- a/libtemplate/templatefunction.c +++ b/libtemplate/templatefunction.c @@ -777,16 +777,11 @@ bool cTemplateFunction::SetAlign(eParamType type, string value) { bool cTemplateFunction::SetFont(eParamType type, string value) {
//check if token
- if ((value.find("{") == 0) && (value.find("}") == (value.size()-1))) {
- value = value.substr(1, value.size()-2);
- map<string,string>::iterator hit = globals->fonts.find(value);
- if (hit != globals->fonts.end()) {
- fontName = hit->second;
- } else {
- map<string,string>::iterator def = globals->fonts.find("vdrOsd");
- if (def == globals->fonts.end())
+ if (IsToken(value)) {
+ if (!globals->GetFont(value, fontName)) {
+ if (!globals->GetFont("{vdrOsd}", fontName)) {
return false;
- fontName = def->second;
+ }
}
} else {
//if no token, directly use input
@@ -820,15 +815,10 @@ bool cTemplateFunction::SetImageType(eParamType type, string value) { bool cTemplateFunction::SetColor(eParamType type, string value) {
if (globals) {
- for (map<string, tColor>::iterator col = globals->colors.begin(); col != globals->colors.end(); col++) {
- stringstream sColName;
- sColName << "{" << col->first << "}";
- string colName = sColName.str();
- if (!colName.compare(value)) {
- tColor colVal = col->second;
- colorParameters.insert(pair<eParamType, tColor>(type, colVal));
- return true;
- }
+ tColor colVal = 0x00000000;
+ if (globals->GetColor(value, colVal)) {
+ colorParameters.insert(pair<eParamType, tColor>(type, colVal));
+ return true;
}
}
if (value.size() != 8)
@@ -844,15 +834,7 @@ bool cTemplateFunction::SetColor(eParamType type, string value) { bool cTemplateFunction::SetTextTokens(string value) {
textTokens.clear();
//first replace globals
- for (map<string,string>::iterator globStr = globals->stringVars.begin(); globStr != globals->stringVars.end(); globStr++) {
- stringstream sToken;
- sToken << "{" << globStr->first << "}";
- string token = sToken.str();
- size_t foundToken = value.find(token);
- if (foundToken != string::npos) {
- value = value.replace(foundToken, token.size(), globStr->second);
- }
- }
+ globals->ReplaceStringVars(value);
//now tokenize
bool tokenFound = true;
while (tokenFound) {
diff --git a/libtemplate/templateview.h b/libtemplate/templateview.h index 1ad5734..1cd4289 100644 --- a/libtemplate/templateview.h +++ b/libtemplate/templateview.h @@ -105,8 +105,8 @@ public: int GetNumPixmapsViewElement(eViewElement ve); int GetNumListViewMenuItems(void); bool GetScalingWindow(cRect &scalingWindow); - map<string,string> GetCustomStringTokens(void) { return globals->customStringTokens; }; - map<string,int> GetCustomIntTokens(void) { return globals->customIntTokens; }; + map<string,string> GetCustomStringTokens(void) { return globals->GetCustomStringTokens(); }; + map<string,int> GetCustomIntTokens(void) { return globals->GetCustomIntTokens(); }; //Checks for parsing template XML files bool ValidSubView(const char *subView); bool ValidViewElement(const char *viewElement); diff --git a/libtemplate/templateviewlist.c b/libtemplate/templateviewlist.c index e75c528..0a6cabc 100644 --- a/libtemplate/templateviewlist.c +++ b/libtemplate/templateviewlist.c @@ -1,5 +1,6 @@ #include "templateviewlist.h"
#include "../config.h"
+#include "../libcore/helpers.h"
cTemplateViewList::cTemplateViewList(void) : cTemplateViewElement() {
listElement = NULL;
@@ -87,16 +88,11 @@ int cTemplateViewList::GetAverageFontWidth(void) { string paramFontSize = fontFunc->GetParameter(ptFontSize);
string fontName = "";
- if ((fontNameToken.find("{") == 0) && (fontNameToken.find("}") == (fontNameToken.size()-1))) {
- fontNameToken = fontNameToken.substr(1, fontNameToken.size()-2);
- map<string,string>::iterator hit = globals->fonts.find(fontNameToken);
- if (hit != globals->fonts.end()) {
- fontName = hit->second;
- } else {
- map<string,string>::iterator def = globals->fonts.find("vdrOsd");
- if (def == globals->fonts.end())
+ if (IsToken(fontNameToken)) {
+ if (!globals->GetFont(fontNameToken, fontName)) {
+ if (!globals->GetFont("{vdrOsd}", fontName)) {
return defaultAverageFontWidth;
- fontName = def->second;
+ }
}
} else {
//if no token, directly use input
@@ -135,16 +131,11 @@ cFont *cTemplateViewList::GetTextAreaFont(void) { string paramFontSize = fontFunc->GetParameter(ptFontSize);
string fontName = "";
- if ((fontNameToken.find("{") == 0) && (fontNameToken.find("}") == (fontNameToken.size()-1))) {
- fontNameToken = fontNameToken.substr(1, fontNameToken.size()-2);
- map<string,string>::iterator hit = globals->fonts.find(fontNameToken);
- if (hit != globals->fonts.end()) {
- fontName = hit->second;
- } else {
- map<string,string>::iterator def = globals->fonts.find("vdrOsd");
- if (def == globals->fonts.end())
+ if (IsToken(fontNameToken)) {
+ if (!globals->GetFont(fontNameToken, fontName)) {
+ if (!globals->GetFont("{vdrOsd}", fontName)) {
return NULL;
- fontName = def->second;
+ }
}
} else {
//if no token, directly use input
diff --git a/libtemplate/xmlparser.c b/libtemplate/xmlparser.c index 01b48a6..9e095a4 100644 --- a/libtemplate/xmlparser.c +++ b/libtemplate/xmlparser.c @@ -89,7 +89,7 @@ bool cXmlParser::ReadPluginView(string plugName, int templateNumber, string temp return true; } -bool cXmlParser::ReadGlobals(cGlobals *globals, string xmlFile) { +bool cXmlParser::ReadGlobals(cGlobals *globals, string xmlFile, bool mandatory) { this->globals = globals; string xmlPath = GetPath(xmlFile); @@ -101,20 +101,30 @@ bool cXmlParser::ReadGlobals(cGlobals *globals, string xmlFile) { doc = xmlCtxtReadFile(ctxt, xmlPath.c_str(), NULL, XML_PARSE_NOENT | XML_PARSE_DTDVALID); - if (doc == NULL ) { - esyslog("skindesigner: ERROR: Globals %s not parsed successfully.", xmlPath.c_str()); + if (doc == NULL) { + if (mandatory) { + esyslog("skindesigner: ERROR: Globals %s not parsed successfully.", xmlPath.c_str()); + } else { + dsyslog("skindesigner: Globals %s not parsed successfully.", xmlPath.c_str()); + } return false; } root = xmlDocGetRootElement(doc); if (ctxt->valid == 0) { - esyslog("skindesigner: Failed to validate %s", xmlPath.c_str()); + if (mandatory) { + esyslog("skindesigner: ERROR: Failed to validate %s", xmlPath.c_str()); + } else { + dsyslog("skindesigner: Failed to validate %s", xmlPath.c_str()); + } return false; } if (root == NULL) { - esyslog("skindesigner: ERROR: Globals %s is empty", xmlPath.c_str()); + if (mandatory) { + esyslog("skindesigner: ERROR: Globals %s is empty", xmlPath.c_str()); + } return false; } @@ -234,7 +244,6 @@ bool cXmlParser::ParsePluginView(string plugName, int templateNumber) { bool cXmlParser::ParseGlobals(void) { xmlNodePtr node = root->xmlChildrenNode; - while (node != NULL) { if (node->type != XML_ELEMENT_NODE) { node = node->next; @@ -304,6 +313,8 @@ string cXmlParser::GetPath(string xmlFile) { string activeTheme = Setup.OSDTheme; string path = ""; if (!xmlFile.compare("globals.xml")) { + path = *cString::sprintf("%s%s/%s", *config.skinPath, activeSkin.c_str(), xmlFile.c_str()); + } else if (!xmlFile.compare("theme.xml")) { path = *cString::sprintf("%s%s/themes/%s/%s", *config.skinPath, activeSkin.c_str(), activeTheme.c_str(), xmlFile.c_str()); } else if (!xmlFile.compare("setup.xml")) { path = *cString::sprintf("%s%s/%s", *config.skinPath, activeSkin.c_str(), xmlFile.c_str()); @@ -424,7 +435,7 @@ void cXmlParser::InsertColor(string name, string value) { str << value; tColor colVal; str >> std::hex >> colVal; - globals->colors.insert(pair<string, tColor>(name, colVal)); + globals->AddColor(name, colVal); } void cXmlParser::ParseGlobalVariables(xmlNodePtr node) { @@ -476,17 +487,11 @@ void cXmlParser::ParseGlobalVariables(xmlNodePtr node) { void cXmlParser::InsertVariable(string name, string type, string value) { if (!type.compare("int")) { int val = atoi(value.c_str()); - globals->intVars.insert(pair<string, int>(name, val)); + globals->AddInt(name, val); } else if (!type.compare("double")) { - if (config.replaceDecPoint) { - if (value.find_first_of('.') != string::npos) { - std::replace( value.begin(), value.end(), '.', config.decPoint); - } - } - double val = atof(value.c_str()); - globals->doubleVars.insert(pair<string, double>(name, val)); + globals->AddDouble(name, value); } else if (!type.compare("string")) { - globals->stringVars.insert(pair<string, string>(name, value)); + globals->AddString(name, value); } } @@ -523,8 +528,11 @@ void cXmlParser::ParseGlobalFonts(xmlNodePtr node) { } if (ok) { fontValue = xmlNodeListGetString(doc, node->xmlChildrenNode, 1); - if (fontName && fontValue) - globals->fonts.insert(pair<string, string>((const char*)fontName, (const char*)fontValue)); + if (fontName && fontValue) { + string fN = (const char*)fontName; + string fV = (const char*)fontValue; + globals->AddFont(fN, fV); + } } if (fontName) xmlFree(fontName); @@ -607,7 +615,7 @@ void cXmlParser::ParseTranslations(xmlNodePtr node) { nodeTrans = nodeTrans->next; } if (globals) { - globals->translations.insert(pair<string, map < string, string > >((const char*)tokenName, tokenTranslations)); + globals->AddTranslation((const char*)tokenName, tokenTranslations); } else if (skinSetup) { skinSetup->SetTranslation((const char*)tokenName, tokenTranslations); } diff --git a/libtemplate/xmlparser.h b/libtemplate/xmlparser.h index 0369622..27399bd 100644 --- a/libtemplate/xmlparser.h +++ b/libtemplate/xmlparser.h @@ -50,7 +50,7 @@ public: virtual ~cXmlParser(void); bool ReadView(cTemplateView *view, string xmlFile); bool ReadPluginView(string plugName, int templateNumber, string templateName); - bool ReadGlobals(cGlobals *globals, string xmlFile); + bool ReadGlobals(cGlobals *globals, string xmlFile, bool mandatory); bool ReadSkinSetup(cSkinSetup *skinSetup, string skin, string xmlFile); bool ParseView(void); bool ParsePluginView(string plugName, int templateNumber); diff --git a/skins/blackhole/themes/default/globals.xml b/skins/blackhole/globals.xml index 3f09c26..9096212 100644 --- a/skins/blackhole/themes/default/globals.xml +++ b/skins/blackhole/globals.xml @@ -1,20 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> +<!DOCTYPE globals SYSTEM "../../dtd/globals.dtd"> <globals> <!-- define all your needed colors here --> <colors> - <color name="clrTransparent">00000000</color> - <color name="clrRed">FFFF0000</color> - <color name="clrGreen">FF5FE200</color> - <color name="clrYellow">FFE2DA00</color> - <color name="clrBlue">FF007FE2</color> - <color name="clrWhite">FFFFFFFF</color> - <color name="clrGray">FF999999</color> - <color name="clrRedTrans">55FF0000</color> - <color name="clrBlackTrans">99000000</color> </colors> <!-- these variables can be used everywhere in the templates @@ -274,10 +265,5 @@ if an invalid font is used in a template, vdrOsd is used as default. --> <fonts> - <font name="light">Source Sans Pro:Light</font> - <font name="bold">Source Sans Pro:Bold</font> - <font name="semibold">Source Sans Pro:Semibold</font> - <font name="regular">Source Sans Pro:Regular</font> - <font name="digital">DS-Digital:Normal</font> </fonts> </globals> diff --git a/skins/blackhole/themes/default/theme.xml b/skins/blackhole/themes/default/theme.xml new file mode 100644 index 0000000..753336b --- /dev/null +++ b/skins/blackhole/themes/default/theme.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> + +<globals> + <!-- + define all your needed colors here + --> + <colors> + <color name="clrTransparent">00000000</color> + <color name="clrRed">FFFF0000</color> + <color name="clrGreen">FF5FE200</color> + <color name="clrYellow">FFE2DA00</color> + <color name="clrBlue">FF007FE2</color> + <color name="clrWhite">FFFFFFFF</color> + <color name="clrGray">FF999999</color> + <color name="clrRedTrans">55FF0000</color> + <color name="clrBlackTrans">99000000</color> + </colors> + <!-- + these variables can be used everywhere in the templates + variabls of type int can also be used as conditions, just + set such a variable to 1 for true and 0 for false + --> + <variables> + </variables> + <!-- + The three Fonts FontOSD, FontFix and FontSml configured in VDR + can be used in all template "font" attributes with this tokens: + {vdrOsd} + {vdrFix} + {vdrSml} + If you like to use further fonts, just define them below. + Syntax: + <font name="tokenname">fontname</font> + These fonts can then also be used in all templates in the "font" + attribute. + if an invalid font is used in a template, vdrOsd is used as default. + --> + <fonts> + <font name="light">Source Sans Pro:Light</font> + <font name="bold">Source Sans Pro:Bold</font> + <font name="semibold">Source Sans Pro:Semibold</font> + <font name="regular">Source Sans Pro:Regular</font> + <font name="digital">DS-Digital:Normal</font> + </fonts> +</globals> diff --git a/skins/metrixhd/themes/default/globals.xml b/skins/metrixhd/globals.xml index 1ce4251..1b2386c 100644 --- a/skins/metrixhd/themes/default/globals.xml +++ b/skins/metrixhd/globals.xml @@ -1,23 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> +<!DOCTYPE globals SYSTEM "../../dtd/globals.dtd"> <globals> <!-- define all your needed colors here --> <colors> - <color name="clrRed">FFFF0000</color> - <color name="clrGreen">FF5FE200</color> - <color name="clrYellow">FFE2DA00</color> - <color name="clrBlue">FF007FE2</color> - <color name="clrTransBlack">C0000000</color> - <color name="clrSemiTransBlack">D0000000</color> - <color name="clrBlueLight">FF1E8BD7</color> - <color name="clrTransBlueLight">C01E8BD7</color> - <color name="clrTransWhite">C0FFFFFF</color> - <color name="clrWhite">FFFFFFFF</color> - <color name="clrDarkGray">FF14141E</color> - <color name="clrTransparent">00000000</color> </colors> <!-- these variables can be used everywhere in the templates @@ -25,8 +13,6 @@ set such a variable to 1 for true and 0 for false --> <variables> - <var type="string" name="stringglobal">hützligrütz</var> - <var type="double" name="pi">3.14</var> </variables> <!-- translations used in the skin @@ -287,7 +273,5 @@ if an invalid font is used in a template, vdrOsd is used as default. --> <fonts> - <font name="light">VDROpen Sans Light:Light</font> - <font name="semibold">VDROpen Sans Semibold:Semibold</font> </fonts> </globals> diff --git a/skins/metrixhd/themes/default/theme.xml b/skins/metrixhd/themes/default/theme.xml new file mode 100644 index 0000000..9c65d2a --- /dev/null +++ b/skins/metrixhd/themes/default/theme.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> + +<globals> + <!-- + define all your needed colors here + --> + <colors> + <color name="clrRed">FFFF0000</color> + <color name="clrGreen">FF5FE200</color> + <color name="clrYellow">FFE2DA00</color> + <color name="clrBlue">FF007FE2</color> + <color name="clrTransBlack">C0000000</color> + <color name="clrSemiTransBlack">D0000000</color> + <color name="clrBlueLight">FF1E8BD7</color> + <color name="clrTransBlueLight">C01E8BD7</color> + <color name="clrTransWhite">C0FFFFFF</color> + <color name="clrWhite">FFFFFFFF</color> + <color name="clrDarkGray">FF14141E</color> + <color name="clrTransparent">00000000</color> + </colors> + <!-- + these variables can be used everywhere in the templates + variabls of type int can also be used as conditions, just + set such a variable to 1 for true and 0 for false + --> + <variables> + <var type="string" name="stringglobal">hützligrütz</var> + <var type="double" name="pi">3.14</var> + </variables> + <!-- + translations used in the skin + --> + <translations> + </translations> + <!-- + The three Fonts FontOSD, FontFix and FontSml configured in VDR + can be used in all template "font" attributes with this tokens: + {vdrOsd} + {vdrFix} + {vdrSml} + If you like to use further fonts, just define them below. + Syntax: + <font name="tokenname">fontname</font> + These fonts can then also be used in all templates in the "font" + attribute. + if an invalid font is used in a template, vdrOsd is used as default. + --> + <fonts> + <font name="light">VDROpen Sans Light:Light</font> + <font name="semibold">VDROpen Sans Semibold:Semibold</font> + </fonts> +</globals> diff --git a/skins/nopacity/themes/darkred/globals.xml b/skins/nopacity/globals.xml index d31c181..0a6e473 100644 --- a/skins/nopacity/themes/darkred/globals.xml +++ b/skins/nopacity/globals.xml @@ -1,29 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> +<!DOCTYPE globals SYSTEM "../../dtd/globals.dtd"> <globals> <!-- define all your needed colors here --> <colors> - <color name="clrRed">FFFF0000</color> - <color name="clrGreen">FF5FE200</color> - <color name="clrYellow">FFE2DA00</color> - <color name="clrBlue">FF007FE2</color> - <color name="clrWhite">FFFFFFFF</color> - <color name="clrTransWhite">99FFFFFF</color> - <color name="clrBlack">FF000000</color> - <color name="clrProgressbar">FF3D0000</color> - <color name="clrBorder">FF2B0000</color> - <color name="clrGray">FF858585</color> - <color name="clrBackground">B0000000</color> - <color name="clrTransBlack">99000000</color> - <color name="clrTransBlackDark">DF000000</color> - <color name="clrTransRed">99FF0000</color> - <color name="clrFontMenuItem">FFFFFFFF</color> - <color name="clrFontMenuItemSelected">FFFFFFFF</color> - <color name="clrFontInactive">FF858585</color> - <color name="clrTransparent">00000000</color> </colors> <!-- these variables can be used everywhere in the templates @@ -31,7 +13,6 @@ set such a variable to 1 for true and 0 for false --> <variables> - <var type="int" name="fadeTime">300</var> </variables> <!-- translations used in the skin diff --git a/skins/nopacity/themes/darkred/theme.xml b/skins/nopacity/themes/darkred/theme.xml new file mode 100644 index 0000000..7ba4794 --- /dev/null +++ b/skins/nopacity/themes/darkred/theme.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> + +<globals> + <colors> + <color name="clrRed">FFFF0000</color> + <color name="clrGreen">FF5FE200</color> + <color name="clrYellow">FFE2DA00</color> + <color name="clrBlue">FF007FE2</color> + <color name="clrWhite">FFFFFFFF</color> + <color name="clrTransWhite">99FFFFFF</color> + <color name="clrBlack">FF000000</color> + <color name="clrProgressbar">FF3D0000</color> + <color name="clrBorder">FF2B0000</color> + <color name="clrGray">FF858585</color> + <color name="clrBackground">B0000000</color> + <color name="clrTransBlack">99000000</color> + <color name="clrTransBlackDark">DF000000</color> + <color name="clrTransRed">99FF0000</color> + <color name="clrFontMenuItem">FFFFFFFF</color> + <color name="clrFontMenuItemSelected">FFFFFFFF</color> + <color name="clrFontInactive">FF858585</color> + <color name="clrTransparent">00000000</color> + </colors> + <variables> + <var type="int" name="fadeTime">300</var> + </variables> +</globals> diff --git a/skins/nopacity/themes/default/globals.xml b/skins/nopacity/themes/default/globals.xml deleted file mode 100644 index 6d730cc..0000000 --- a/skins/nopacity/themes/default/globals.xml +++ /dev/null @@ -1,288 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> - -<globals> - <!-- - define all your needed colors here - --> - <colors> - <color name="clrRed">FFFF0000</color> - <color name="clrGreen">FF5FE200</color> - <color name="clrYellow">FFE2DA00</color> - <color name="clrBlue">FF007FE2</color> - <color name="clrWhite">FFFFFFFF</color> - <color name="clrTransWhite">99FFFFFF</color> - <color name="clrBlack">FF000000</color> - <color name="clrProgressbar">FF8EAB21</color> - <color name="clrBorder">FF4C5C11</color> - <color name="clrGray">FF858585</color> - <color name="clrBackground">B012273F</color> - <color name="clrTransBlack">99000000</color> - <color name="clrTransBlackDark">CC000000</color> - <color name="clrTransRed">99FF0000</color> - <color name="clrFontMenuItem">FFFFFFFF</color> - <color name="clrFontMenuItemSelected">FF363636</color> - <color name="clrFontInactive">FF858585</color> - <color name="clrTransparent">00000000</color> - </colors> - <!-- - these variables can be used everywhere in the templates - variabls of type int can also be used as conditions, just - set such a variable to 1 for true and 0 for false - --> - <variables> - <var type="int" name="fadeTime">300</var> - </variables> - <!-- - translations used in the skin - --> - <translations> - <token name="tr(free)"> - <trans lang="en_EN">free</trans> - <trans lang="de_DE">frei</trans> - </token> - <token name="tr(transponder)"> - <trans lang="en_EN">Transponder</trans> - <trans lang="de_DE">Transponder</trans> - </token> - <token name="tr(now)"> - <trans lang="en_EN">Now</trans> - <trans lang="de_DE">Jetzt</trans> - </token> - <token name="tr(next)"> - <trans lang="en_EN">Next</trans> - <trans lang="de_DE">Nachfolgend</trans> - </token> - <token name="tr(nextschedules)"> - <trans lang="en_EN">Next Schedules</trans> - <trans lang="de_DE">Nachfolgende Sendungen</trans> - </token> - <token name="tr(reruns)"> - <trans lang="en_EN">Reruns</trans> - <trans lang="de_DE">Wiederholungen</trans> - </token> - <token name="tr(rerunsof)"> - <trans lang="en_EN">Reruns of</trans> - <trans lang="de_DE">Wiederholungen von</trans> - </token> - <token name="tr(actors)"> - <trans lang="en_EN">Actors</trans> - <trans lang="de_DE">Schauspieler</trans> - </token> - <token name="tr(episode)"> - <trans lang="en_EN">Episode</trans> - <trans lang="de_DE">Folge</trans> - </token> - <token name="tr(season)"> - <trans lang="en_EN">Season</trans> - <trans lang="de_DE">Staffel</trans> - </token> - <token name="tr(gueststars)"> - <trans lang="en_EN">Guest Stars</trans> - <trans lang="de_DE">Gaststars</trans> - </token> - <token name="tr(seriesfirstaired)"> - <trans lang="en_EN">Series First Aired</trans> - <trans lang="de_DE">Erstausstrahlung der Serie</trans> - </token> - <token name="tr(episodefirstaired)"> - <trans lang="en_EN">Episode First Aired</trans> - <trans lang="de_DE">Erstausstrahlung der Episode</trans> - </token> - <token name="tr(network)"> - <trans lang="en_EN">Network</trans> - <trans lang="de_DE">TV Station</trans> - </token> - <token name="tr(genre)"> - <trans lang="en_EN">Genre</trans> - <trans lang="de_DE">Genre</trans> - </token> - <token name="tr(status)"> - <trans lang="en_EN">Status</trans> - <trans lang="de_DE">Status</trans> - </token> - <token name="tr(rating)"> - <trans lang="en_EN">Rating</trans> - <trans lang="de_DE">Bewertung</trans> - </token> - <token name="tr(episoderating)"> - <trans lang="en_EN">Episode Rating</trans> - <trans lang="de_DE">Bewertung der Folge</trans> - </token> - <token name="tr(recinfo)"> - <trans lang="en_EN">Recording Information</trans> - <trans lang="de_DE">Aufnahme Informationen</trans> - </token> - <token name="tr(seriesgalery)"> - <trans lang="en_EN">Series Galery</trans> - <trans lang="de_DE">Serien Galerie</trans> - </token> - <token name="tr(moviegalery)"> - <trans lang="en_EN">Movie Galery</trans> - <trans lang="de_DE">Spielfilm Galerie</trans> - </token> - <token name="tr(originaltitle)"> - <trans lang="en_EN">Original Title</trans> - <trans lang="de_DE">Originaltitel</trans> - </token> - <token name="tr(budget)"> - <trans lang="en_EN">Budget</trans> - <trans lang="de_DE">Budget</trans> - </token> - <token name="tr(revenue)"> - <trans lang="en_EN">Revenue</trans> - <trans lang="de_DE">Einnahmen</trans> - </token> - <token name="tr(adult)"> - <trans lang="en_EN">Adult</trans> - <trans lang="de_DE">Nur für Erwachsene</trans> - </token> - <token name="tr(releasedate)"> - <trans lang="en_EN">Release Date</trans> - <trans lang="de_DE">Erscheinungsdatum</trans> - </token> - <token name="tr(runtime)"> - <trans lang="en_EN">Runtime</trans> - <trans lang="de_DE">Laufzeit</trans> - </token> - <token name="tr(popularity)"> - <trans lang="en_EN">Popularity</trans> - <trans lang="de_DE">Popularität</trans> - </token> - <token name="tr(voteaverage)"> - <trans lang="en_EN">Vote Average</trans> - <trans lang="de_DE">Durchschnittliche Wertung</trans> - </token> - <token name="tr(homepage)"> - <trans lang="en_EN">Homepage</trans> - <trans lang="de_DE">Homepage</trans> - </token> - <token name="tr(recsize)"> - <trans lang="en_EN">Recording size</trans> - <trans lang="de_DE">Größe der Aufnahme</trans> - </token> - <token name="tr(recsizecutted)"> - <trans lang="en_EN">Cutted Recording Size</trans> - <trans lang="de_DE">Größe der geschnittenen Aufnahme</trans> - </token> - <token name="tr(reclength)"> - <trans lang="en_EN">Recording Length</trans> - <trans lang="de_DE">Länge der Aufnahme</trans> - </token> - <token name="tr(reclengthcutted)"> - <trans lang="en_EN">Cutted Recording Length</trans> - <trans lang="de_DE">Länge der geschnittenen Aufnahme</trans> - </token> - <token name="tr(bitrate)"> - <trans lang="en_EN">Bit Rate</trans> - <trans lang="de_DE">Bitrate</trans> - </token> - <token name="tr(format)"> - <trans lang="en_EN">Format</trans> - <trans lang="de_DE">Format</trans> - </token> - <token name="tr(searchtimer)"> - <trans lang="en_EN">Searchtimer</trans> - <trans lang="de_DE">Suchtimer</trans> - </token> - <token name="tr(volume)"> - <trans lang="en_EN">Volume</trans> - <trans lang="de_DE">Lautstärke</trans> - </token> - <token name="tr(pause)"> - <trans lang="en_EN">Pause</trans> - <trans lang="de_DE">Pause</trans> - </token> - <token name="tr(apparenttemp)"> - <trans lang="en_EN">Felt Temperature</trans> - <trans lang="de_DE">Gefühlte Temperatur</trans> - </token> - <token name="tr(todaymin)"> - <trans lang="en_EN">minimum today</trans> - <trans lang="de_DE">heutiges Minimum</trans> - </token> - <token name="tr(todaymax)"> - <trans lang="en_EN">maximum today</trans> - <trans lang="de_DE">heutiges Maximum</trans> - </token> - <token name="tr(precipitationprobability)"> - <trans lang="en_EN">Precipitation Prob.</trans> - <trans lang="de_DE">Regenwahrsch.</trans> - </token> - <token name="tr(precipitationintensity)"> - <trans lang="en_EN">Precipitation Intensity</trans> - <trans lang="de_DE">Regenmenge</trans> - </token> - <token name="tr(humidity)"> - <trans lang="en_EN">Humidity</trans> - <trans lang="de_DE">Luftfeuchtigkeit</trans> - </token> - <token name="tr(apparenttemp)"> - <trans lang="en_EN">Felt Temperature</trans> - <trans lang="de_DE">Gefühlte Temperatur</trans> - </token> - <token name="tr(windbearing)"> - <trans lang="en_EN">Wind Bearing</trans> - <trans lang="de_DE">Windrichtung</trans> - </token> - <token name="tr(windspeed)"> - <trans lang="en_EN">Wind Speed</trans> - <trans lang="de_DE">Windgeschwindigkeit</trans> - </token> - <token name="tr(cloudcover)"> - <trans lang="en_EN">Cloud Cover</trans> - <trans lang="de_DE">Bewölkung</trans> - </token> - <token name="tr(pressure)"> - <trans lang="en_EN">Pressure</trans> - <trans lang="de_DE">Luftdruck</trans> - </token> - <token name="tr(ozone)"> - <trans lang="en_EN">Ozone</trans> - <trans lang="de_DE">Ozon</trans> - </token> - <token name="tr(visibility)"> - <trans lang="en_EN">visibility</trans> - <trans lang="de_DE">Sicht</trans> - </token> - <token name="tr(conditions)"> - <trans lang="en_EN">Weather Conditions</trans> - <trans lang="de_DE">Wetterlage</trans> - </token> - <token name="tr(from)"> - <trans lang="en_EN">from</trans> - <trans lang="de_DE">aus</trans> - </token> - <token name="tr(felt)"> - <trans lang="en_EN">felt</trans> - <trans lang="de_DE">gefühlt</trans> - </token> - <token name="tr(min)"> - <trans lang="en_EN">min</trans> - <trans lang="de_DE">min</trans> - </token> - <token name="tr(max)"> - <trans lang="en_EN">max</trans> - <trans lang="de_DE">max</trans> - </token> - <token name="tr(for)"> - <trans lang="en_EN">for</trans> - <trans lang="de_DE">für</trans> - </token> - </translations> - <!-- - The three Fonts FontOSD, FontFix and FontSml configured in VDR - can be used in all template "font" attributes with this tokens: - {vdrOsd} - {vdrFix} - {vdrSml} - If you like to use further fonts, just define them below. - Syntax: - <font name="tokenname">fontname</font> - These fonts can then also be used in all templates in the "font" - attribute. - if an invalid font is used in a template, vdrOsd is used as default. - --> - <fonts> - </fonts> -</globals> diff --git a/skins/nopacity/themes/default/theme.xml b/skins/nopacity/themes/default/theme.xml new file mode 100644 index 0000000..ec3898e --- /dev/null +++ b/skins/nopacity/themes/default/theme.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE globals SYSTEM "../../../../dtd/globals.dtd"> + +<globals> + <colors> + <color name="clrRed">FFFF0000</color> + <color name="clrGreen">FF5FE200</color> + <color name="clrYellow">FFE2DA00</color> + <color name="clrBlue">FF007FE2</color> + <color name="clrWhite">FFFFFFFF</color> + <color name="clrTransWhite">99FFFFFF</color> + <color name="clrBlack">FF000000</color> + <color name="clrProgressbar">FF8EAB21</color> + <color name="clrBorder">FF4C5C11</color> + <color name="clrGray">FF858585</color> + <color name="clrBackground">B012273F</color> + <color name="clrTransBlack">99000000</color> + <color name="clrTransBlackDark">CC000000</color> + <color name="clrTransRed">99FF0000</color> + <color name="clrFontMenuItem">FFFFFFFF</color> + <color name="clrFontMenuItemSelected">FF363636</color> + <color name="clrFontInactive">FF858585</color> + <color name="clrTransparent">00000000</color> + </colors> + <variables> + <var type="int" name="fadeTime">300</var> + </variables> +</globals> diff --git a/views/displaymenuview.c b/views/displaymenuview.c index 0b9c5a8..32a00ba 100644 --- a/views/displaymenuview.c +++ b/views/displaymenuview.c @@ -419,7 +419,6 @@ void cDisplayMenuMainView::DrawTemperatures(void) { if (!ViewElementImplemented(veTemperatures)) { return; } - cString execCommand = cString::sprintf("cd \"%s/\"; \"%s/temperatures\"", SCRIPTFOLDER, SCRIPTFOLDER); system(*execCommand); |