mirror of
https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
synced 2023-10-19 15:58:31 +00:00
implemented horizontal menus
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user