diff options
author | louis <louis.braun@gmx.de> | 2015-08-08 11:04:15 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-08-08 11:04:15 +0200 |
commit | ea758f955655ee48b0c3b0f277c21e8cbc045316 (patch) | |
tree | 1326c86deede899b6d8394c611a09831ff1858fe /libcore | |
parent | b5c587b2567e4ac838a33363d02ad228d94b9b14 (diff) | |
download | vdr-plugin-skindesigner-ea758f955655ee48b0c3b0f277c21e8cbc045316.tar.gz vdr-plugin-skindesigner-ea758f955655ee48b0c3b0f277c21e8cbc045316.tar.bz2 |
implemented horizontal menus
Diffstat (limited to 'libcore')
-rw-r--r-- | libcore/skinsetup.c | 74 | ||||
-rw-r--r-- | libcore/skinsetup.h | 12 |
2 files changed, 76 insertions, 10 deletions
diff --git a/libcore/skinsetup.c b/libcore/skinsetup.c index e52ff41..c9ae7bd 100644 --- a/libcore/skinsetup.c +++ b/libcore/skinsetup.c @@ -1,6 +1,7 @@ #include "skinsetup.h" #include "../config.h" #include "../libtemplate/xmlparser.h" +#include "../libcore/helpers.h" // --- cSkinSetupParameter ----------------------------------------------------------- @@ -10,7 +11,17 @@ cSkinSetupParameter::cSkinSetupParameter(void) { displayText = ""; min = 0; max = 1000; - value = 0; + value = 0; + options = NULL; + optionsTranslated = NULL; + numOptions = 0; +} + +cSkinSetupParameter::~cSkinSetupParameter(void) { + if (numOptions > 0 && options && optionsTranslated) { + delete[] options; + delete[] optionsTranslated; + } } void cSkinSetupParameter::Debug(void) { @@ -19,9 +30,16 @@ void cSkinSetupParameter::Debug(void) { 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); + else if (type == sptString) + sType = "string"; + 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); + if (type == sptString && options) { + for (int i=0; i < numOptions; i++) { + dsyslog("skindesigner: option %d: %s, translated: %s", i+1, options[i], optionsTranslated[i]); + } + } } // --- cSkinSetupMenu ----------------------------------------------------------- @@ -88,7 +106,7 @@ void cSkinSetupMenu::InitIterators(void) { subMenuIt = subMenus.begin(); } -void cSkinSetupMenu::SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value) { +void cSkinSetupMenu::SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value, string options) { cSkinSetupParameter *param = new cSkinSetupParameter(); param->type = paramType; param->name = name; @@ -100,8 +118,26 @@ void cSkinSetupMenu::SetParameter(eSetupParameterType paramType, string name, st if (max.size() && paramType == sptInt) { param->max = atoi(max.c_str()); } + param->value = atoi(value.c_str()); + if (paramType == sptString) { + splitstring o(options.c_str()); + vector<string> opts = o.split(',', 1); + int numOpts = opts.size(); + if (numOpts > 0) { + param->numOptions = numOpts; + param->options = new const char*[numOpts]; + int i=0; + for (vector<string>::iterator it = opts.begin(); it != opts.end(); it++) { + string option = trim(*it); + char *s = new char[option.size()]; + strcpy(s, option.c_str()); + param->options[i++] = s; + } + } + } + parameters.push_back(param); } @@ -185,7 +221,7 @@ void cSkinSetup::SubMenuDone(void) { } } -void cSkinSetup::SetParameter(string type, string name, string displayText, string min, string max, string value) { +void cSkinSetup::SetParameter(string type, string name, string displayText, string min, string max, string value, string options) { if (!type.size() || !name.size() || !displayText.size() || !value.size()) { esyslog("skindesigner: invalid setup parameter for skin %s", skin.c_str()); return; @@ -195,12 +231,14 @@ void cSkinSetup::SetParameter(string type, string name, string displayText, stri paramType = sptInt; } else if (!type.compare("bool")) { paramType = sptBool; + } else if (!type.compare("string")) { + paramType = sptString; } if (paramType == sptUnknown) { esyslog("skindesigner: invalid setup parameter for skin %s", skin.c_str()); return; } - currentMenu->SetParameter(paramType, name, displayText, min, max, value); + currentMenu->SetParameter(paramType, name, displayText, min, max, value, options); } cSkinSetupParameter *cSkinSetup::GetNextParameter(void) { @@ -221,7 +259,14 @@ void cSkinSetup::AddToGlobals(cGlobals *globals) { rootMenu->InitIterators(); cSkinSetupParameter *param = NULL; while (param = rootMenu->GetNextParameter()) { - globals->AddInt(param->name, param->value); + if (param->type == sptString) { + string value = param->options[param->value]; + globals->AddString(param->name, value); + string intName = "index" + param->name; + globals->AddInt(intName, param->value); + } else { + globals->AddInt(param->name, param->value); + } } } @@ -233,6 +278,23 @@ void cSkinSetup::TranslateSetup(void) { if (Translate(param->displayText, transl)) { param->displayText = transl; } + if (param->type == sptString && param->numOptions > 0) { + param->optionsTranslated = new const char*[param->numOptions]; + for (int i = 0; i < param->numOptions; i++) { + string option = param->options[i]; + string optionTransToken = "{tr(" + option + ")}"; + string optionTranslated = ""; + if (Translate(optionTransToken, optionTranslated)) { + char *s = new char[optionTranslated.size()]; + strcpy(s, optionTranslated.c_str()); + param->optionsTranslated[i] = s; + } else { + char *s = new char[option.size()]; + strcpy(s, option.c_str()); + param->optionsTranslated[i] = s; + } + } + } } rootMenu->InitIterators(); diff --git a/libcore/skinsetup.h b/libcore/skinsetup.h index 29649ed..a664ebc 100644 --- a/libcore/skinsetup.h +++ b/libcore/skinsetup.h @@ -15,6 +15,7 @@ using namespace std; enum eSetupParameterType { sptInt, sptBool, + sptString, sptUnknown }; @@ -24,13 +25,16 @@ class cSkinSetupParameter { private: public: cSkinSetupParameter(void); - virtual ~cSkinSetupParameter(void) {}; + virtual ~cSkinSetupParameter(void); eSetupParameterType type; string name; string displayText; int min; int max; - int value; + int value; + const char* *options; + const char* *optionsTranslated; + int numOptions; void Debug(void); }; @@ -55,7 +59,7 @@ public: void SetParent(cSkinSetupMenu *p) { parent = p; }; cSkinSetupMenu *GetParent(void) { return parent; }; void AddSubMenu(cSkinSetupMenu *sub) { subMenus.push_back(sub); }; - void SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value); + void SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value, string options); void InitIterators(void); void InitParameterIterator(void) { paramIt = parameters.begin(); }; cSkinSetupParameter *GetNextParameter(bool deep = true); @@ -82,7 +86,7 @@ public: bool ReadFromXML(void); void SetSubMenu(string name, string displayText); void SubMenuDone(void); - void SetParameter(string type, string name, string displayText, string min, string max, string value); + void SetParameter(string type, string name, string displayText, string min, string max, string value, string options); void InitParameterIterator(void) { rootMenu->InitIterators(); }; cSkinSetupParameter *GetNextParameter(void); cSkinSetupParameter *GetParameter(string name); |