summaryrefslogtreecommitdiff
path: root/libcore
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-08-08 11:04:15 +0200
committerlouis <louis.braun@gmx.de>2015-08-08 11:04:15 +0200
commitea758f955655ee48b0c3b0f277c21e8cbc045316 (patch)
tree1326c86deede899b6d8394c611a09831ff1858fe /libcore
parentb5c587b2567e4ac838a33363d02ad228d94b9b14 (diff)
downloadvdr-plugin-skindesigner-ea758f955655ee48b0c3b0f277c21e8cbc045316.tar.gz
vdr-plugin-skindesigner-ea758f955655ee48b0c3b0f277c21e8cbc045316.tar.bz2
implemented horizontal menus
Diffstat (limited to 'libcore')
-rw-r--r--libcore/skinsetup.c74
-rw-r--r--libcore/skinsetup.h12
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);