mirror of
https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
synced 2023-10-19 17:58:31 +02:00
implemented horizontal menus
This commit is contained in:
parent
b5c587b256
commit
ea758f9556
15
HISTORY
15
HISTORY
@ -405,3 +405,18 @@ Version 0.6.2
|
||||
|
||||
Version 0.6.3
|
||||
|
||||
- implemented horizontal menus
|
||||
For displaying horizontal menus with VDR <= 2.2.x a VDR
|
||||
patch is required (see /patches/vdr-2.2.0_horizontal_menu.patch
|
||||
in the plugin source directory). Without this patch the keys
|
||||
left/right and up/down are not toggled in horizontal menus.
|
||||
With VDR >= 2.3.1 this patch is not needed anymore.
|
||||
- added possibility to add conditions to <menuitems> elements
|
||||
- added possibility to define a viewelement several times with
|
||||
different conditions
|
||||
- added "string" skin setup parameter with multiple options
|
||||
- added "valign" option in <drawtextbox>. If the box height is set
|
||||
and the text does not need the complete height, with valign="center"
|
||||
the text can be placed horizontally centered inside the box borders.
|
||||
- implemented optional horizontal main-, recordings- and
|
||||
weatherforecast menu in metrixhd
|
||||
|
9
README
9
README
@ -34,8 +34,13 @@ Requirements
|
||||
|
||||
- libcurl
|
||||
|
||||
- for scaling the video picture to fit into the VDR menu window please use
|
||||
softhddevice plugin revision 87c1c7be (2013-01-01) or newer.
|
||||
- softhddevice plugin revision ec58e456 (2015-06-13) or newer. With older
|
||||
versions shifting does not work properly
|
||||
|
||||
- For displaying horizontal menus with VDR <= 2.2.x a VDR patch is required
|
||||
(see /patches/vdr-2.2.0_horizontal_menu.patch in the plugin source directory)
|
||||
Without this patch the keys left/right and up/down are not toggled in
|
||||
horizontal menus. With VDR >= 2.3.1 this patch is not needed anymore.
|
||||
|
||||
- epgsearch Git since commit ba7c6277 (2013-01-03) to correctly replace the
|
||||
schedules menu with epgsearch
|
||||
|
@ -65,6 +65,12 @@ void cSDDisplayMenu::SetMenuSortMode(eMenuSortMode MenuSortMode) {
|
||||
rootView->SetSortMode(MenuSortMode);
|
||||
}
|
||||
|
||||
eMenuOrientation cSDDisplayMenu::MenuOrientation(void) {
|
||||
if (!doOutput)
|
||||
return moVertical;
|
||||
return rootView->MenuOrientation();
|
||||
}
|
||||
|
||||
void cSDDisplayMenu::SetPluginMenu(string name, int menu, int type, bool init) {
|
||||
pluginName = name;
|
||||
pluginMenu = menu;
|
||||
|
@ -4,6 +4,15 @@
|
||||
#include "libtemplate/template.h"
|
||||
#include "views/displaymenurootview.h"
|
||||
|
||||
#if defined(APIVERSNUM) && APIVERSNUM < 20301
|
||||
#ifndef MENU_ORIENTATION_DEFINED
|
||||
enum eMenuOrientation {
|
||||
moVertical = 0,
|
||||
moHorizontal
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
enum eViewState {
|
||||
vsInit,
|
||||
vsMenuInit,
|
||||
@ -32,6 +41,7 @@ public:
|
||||
virtual void Clear(void);
|
||||
virtual void SetMenuCategory(eMenuCategory MenuCat);
|
||||
virtual void SetMenuSortMode(eMenuSortMode MenuSortMode);
|
||||
virtual eMenuOrientation MenuOrientation(void);
|
||||
virtual void SetPluginMenu(string name, int menu, int type, bool init);
|
||||
virtual void SetTitle(const char *Title);
|
||||
virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);
|
||||
|
@ -42,7 +42,7 @@
|
||||
align (left|top|center|bottom|right) #IMPLIED
|
||||
menuitemwidth CDATA #IMPLIED
|
||||
numlistelements CDATA #REQUIRED
|
||||
orientation (horizontal|vertical) #REQUIRED
|
||||
orientation CDATA #REQUIRED
|
||||
>
|
||||
|
||||
<!ELEMENT listelement (areacontainer|area|areascroll)*>
|
||||
|
@ -418,7 +418,8 @@
|
||||
menuitemwidth CDATA #IMPLIED
|
||||
determinatefont CDATA #IMPLIED
|
||||
numlistelements CDATA #REQUIRED
|
||||
orientation (horizontal|vertical) #REQUIRED
|
||||
orientation CDATA #REQUIRED
|
||||
condition CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT listelement (areacontainer|area|areascroll)*>
|
||||
|
@ -18,46 +18,55 @@
|
||||
|
||||
<!ELEMENT background (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST background
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT header (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST header
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT datetime (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST datetime
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT message (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST message
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT colorbuttons (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST colorbuttons
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT scrollbar (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST scrollbar
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT detailheader (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST detailheader
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT tablabels (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST tablabels
|
||||
condition CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT menuitems (listelement,currentelement?)>
|
||||
<!ATTLIST menuitems
|
||||
condition CDATA #IMPLIED
|
||||
x CDATA #REQUIRED
|
||||
y CDATA #REQUIRED
|
||||
width CDATA #REQUIRED
|
||||
@ -65,7 +74,7 @@
|
||||
align (left|top|center|bottom|right) #IMPLIED
|
||||
menuitemwidth CDATA #IMPLIED
|
||||
numlistelements CDATA #REQUIRED
|
||||
orientation (horizontal|vertical) #REQUIRED
|
||||
orientation CDATA #REQUIRED
|
||||
>
|
||||
|
||||
<!ELEMENT listelement (areacontainer|area|areascroll)*>
|
||||
@ -75,6 +84,7 @@
|
||||
|
||||
<!ELEMENT currentelement (areacontainer|area|areascroll)*>
|
||||
<!ATTLIST currentelement
|
||||
condition CDATA #IMPLIED
|
||||
delay CDATA #REQUIRED
|
||||
fadetime CDATA #IMPLIED
|
||||
debug CDATA #IMPLIED
|
||||
|
@ -95,6 +95,7 @@
|
||||
width CDATA #REQUIRED
|
||||
height CDATA #IMPLIED
|
||||
align (left|center|right) #IMPLIED
|
||||
valign (top|center|bottom) #IMPLIED
|
||||
maxlines CDATA #IMPLIED
|
||||
floatwidth CDATA #IMPLIED
|
||||
floatheight CDATA #IMPLIED
|
||||
|
@ -13,10 +13,11 @@
|
||||
<!ELEMENT parameter (#PCDATA)>
|
||||
<!ATTLIST parameter
|
||||
name NMTOKEN #REQUIRED
|
||||
type (int|bool) #REQUIRED
|
||||
type (int|bool|string) #REQUIRED
|
||||
min NMTOKEN #IMPLIED
|
||||
max NMTOKEN #IMPLIED
|
||||
displaytext CDATA #REQUIRED
|
||||
options CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT token (trans)+>
|
||||
|
@ -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);
|
||||
|
@ -149,6 +149,15 @@ void cGlobals::ReplaceStringVars(string &value) {
|
||||
|
||||
}
|
||||
|
||||
bool cGlobals::GetString(string &name, string &value) {
|
||||
map<string,string>::iterator hit = stringVars.find(name);
|
||||
if (hit == stringVars.end())
|
||||
return false;
|
||||
value = hit->second;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool cGlobals::AddTranslation(string name, map < string, string > transl) {
|
||||
translations.erase(name);
|
||||
translations.insert(pair<string, map < string, string > >(name, transl));
|
||||
|
@ -47,6 +47,7 @@ public:
|
||||
void ReplaceDoubleVars(string &value);
|
||||
void AddString(string &name, string &value);
|
||||
void ReplaceStringVars(string &value);
|
||||
bool GetString(string &name, string &value);
|
||||
bool AddTranslation(string name, map < string, string > transl);
|
||||
bool Translate(string text, string &translation);
|
||||
void AddCustomInt(string &name, int value);
|
||||
|
@ -291,6 +291,14 @@ void cConditionalParameter::Evaluate(map < string, int > *intTokens, map < strin
|
||||
tokenTrue = true;
|
||||
}
|
||||
}
|
||||
if (!tokenTrue) {
|
||||
string value = "";
|
||||
if (globals->GetString(cond->tokenName, value)) {
|
||||
if (!value.compare(cond->strCompareValue)) {
|
||||
tokenTrue = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (cond->type == ctStringNotEquals) {
|
||||
if (stringTokens) {
|
||||
map < string, string >::iterator hit = stringTokens->find(cond->tokenName);
|
||||
@ -313,6 +321,14 @@ void cConditionalParameter::Evaluate(map < string, int > *intTokens, map < strin
|
||||
tokenTrue = true;
|
||||
}
|
||||
}
|
||||
if (!tokenTrue) {
|
||||
string value = "";
|
||||
if (globals->GetString(cond->tokenName, value)) {
|
||||
if (value.find(cond->strCompareValue) != string::npos) {
|
||||
tokenTrue = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (cond->type == ctStringNotContains) {
|
||||
if (stringTokens) {
|
||||
map < string, string >::iterator hit = stringTokens->find(cond->tokenName);
|
||||
@ -472,6 +488,6 @@ string cConditionalParameter::StripWhitespaces(string value) {
|
||||
void cConditionalParameter::Debug(void) {
|
||||
dsyslog("skindesigner: Condition %s, Type: %s, cond is %s", value.c_str(), (type == cpAnd)?"and combination":((type == cpOr)?"or combination":"single param") , isTrue?"true":"false");
|
||||
for (vector<sCondition>::iterator it = conditions.begin(); it != conditions.end(); it++) {
|
||||
dsyslog("skindesigner: cond token %s, type: %d, compareValue %d, negated: %d", it->tokenName.c_str(), it->type, it->compareValue, it->isNegated);
|
||||
dsyslog("skindesigner: cond token %s, type: %d, compareValue %d, negated: %d, strCompareValue %s", it->tokenName.c_str(), it->type, it->compareValue, it->isNegated, it->strCompareValue.c_str());
|
||||
}
|
||||
}
|
@ -14,11 +14,11 @@ cTemplateView::cTemplateView(void) {
|
||||
}
|
||||
|
||||
cTemplateView::~cTemplateView() {
|
||||
for (map < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
for (multimap < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
delete it->second;
|
||||
}
|
||||
|
||||
for (map < eViewList, cTemplateViewList* >::iterator it = viewLists.begin(); it != viewLists.end(); it++) {
|
||||
for (multimap < eViewList, cTemplateViewList* >::iterator it = viewLists.begin(); it != viewLists.end(); it++) {
|
||||
delete it->second;
|
||||
}
|
||||
|
||||
@ -64,11 +64,15 @@ void cTemplateView::SetContainer(int x, int y, int width, int height) {
|
||||
}
|
||||
|
||||
cTemplateViewElement *cTemplateView::GetViewElement(eViewElement ve) {
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
return NULL;
|
||||
pair<multimap< eViewElement, cTemplateViewElement* >::iterator, multimap< eViewElement, cTemplateViewElement* >::iterator> rangeViewElements;
|
||||
rangeViewElements = viewElements.equal_range(ve);
|
||||
for (multimap<eViewElement, cTemplateViewElement*>::iterator it = rangeViewElements.first; it!=rangeViewElements.second; ++it) {
|
||||
cTemplateViewElement *viewElement = it->second;
|
||||
if (viewElement->Execute()) {
|
||||
return viewElement;
|
||||
}
|
||||
}
|
||||
return hit->second;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void cTemplateView::InitViewElementIterator(void) {
|
||||
@ -104,10 +108,21 @@ cTemplateViewGrid *cTemplateView::GetNextViewGrid(void) {
|
||||
}
|
||||
|
||||
cTemplateViewList *cTemplateView::GetViewList(eViewList vl) {
|
||||
map < eViewList, cTemplateViewList* >::iterator hit = viewLists.find(vl);
|
||||
if (hit == viewLists.end())
|
||||
return NULL;
|
||||
return hit->second;
|
||||
if (viewLists.size() == 1) {
|
||||
multimap < eViewList, cTemplateViewList* >::iterator hit = viewLists.find(vl);
|
||||
if (hit == viewLists.end())
|
||||
return NULL;
|
||||
return hit->second;
|
||||
}
|
||||
pair<multimap< eViewList, cTemplateViewList* >::iterator, multimap< eViewList, cTemplateViewList* >::iterator> rangeViewLists;
|
||||
rangeViewLists = viewLists.equal_range(vl);
|
||||
for (multimap<eViewList, cTemplateViewList*>::iterator it = rangeViewLists.first; it!=rangeViewLists.second; ++it) {
|
||||
cTemplateViewList *viewList = it->second;
|
||||
if (viewList->Execute()) {
|
||||
return viewList;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void cTemplateView::InitViewListIterator(void) {
|
||||
@ -190,7 +205,7 @@ cRect cTemplateView::GetOsdSize(void) {
|
||||
|
||||
int cTemplateView::GetNumPixmaps(void) {
|
||||
int numPixmaps = 0;
|
||||
for (map < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
for (multimap < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
cTemplateViewElement *viewElement = it->second;
|
||||
numPixmaps += viewElement->GetNumPixmaps();
|
||||
}
|
||||
@ -198,10 +213,9 @@ int cTemplateView::GetNumPixmaps(void) {
|
||||
}
|
||||
|
||||
int cTemplateView::GetNumPixmapsViewElement(eViewElement ve) {
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end())
|
||||
cTemplateViewElement *viewElement = GetViewElement(ve);
|
||||
if (!viewElement)
|
||||
return 0;
|
||||
cTemplateViewElement *viewElement = hit->second;
|
||||
return viewElement->GetNumPixmaps();
|
||||
}
|
||||
|
||||
@ -248,15 +262,14 @@ tColor cTemplateView::DebugGridFontColor(void) {
|
||||
}
|
||||
|
||||
bool cTemplateView::ExecuteView(eViewElement ve) {
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end())
|
||||
cTemplateViewElement *viewElement = GetViewElement(ve);
|
||||
if (!viewElement)
|
||||
return false;
|
||||
cTemplateViewElement *viewElement = hit->second;
|
||||
return viewElement->Execute();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool cTemplateView::DetachViewElement(eViewElement ve) {
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
multimap < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end())
|
||||
return false;
|
||||
cTemplateViewElement *viewElement = hit->second;
|
||||
@ -264,10 +277,9 @@ bool cTemplateView::DetachViewElement(eViewElement ve) {
|
||||
}
|
||||
|
||||
string cTemplateView::GetViewElementMode(eViewElement ve) {
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end())
|
||||
cTemplateViewElement *viewElement = GetViewElement(ve);
|
||||
if (!viewElement)
|
||||
return "";
|
||||
cTemplateViewElement *viewElement = hit->second;
|
||||
return viewElement->GetMode();
|
||||
}
|
||||
|
||||
@ -563,9 +575,8 @@ void cTemplateView::PreCache(bool isSubview) {
|
||||
int osdWidth = parameters->GetNumericParameter(ptWidth);
|
||||
int osdHeight = parameters->GetNumericParameter(ptHeight);
|
||||
int pixOffset = 0;
|
||||
|
||||
//Cache ViewElements
|
||||
for (map < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
for (multimap < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
cTemplateViewElement *viewElement = it->second;
|
||||
viewElement->SetGlobals(globals);
|
||||
if (!isSubview)
|
||||
@ -588,7 +599,7 @@ void cTemplateView::PreCache(bool isSubview) {
|
||||
}
|
||||
|
||||
//Cache ViewLists
|
||||
for (map < eViewList, cTemplateViewList* >::iterator it = viewLists.begin(); it != viewLists.end(); it++) {
|
||||
for (multimap < eViewList, cTemplateViewList* >::iterator it = viewLists.begin(); it != viewLists.end(); it++) {
|
||||
cTemplateViewList *viewList = it->second;
|
||||
viewList->SetGlobals(globals);
|
||||
//viewlists in subviews need complete container information
|
||||
@ -632,13 +643,13 @@ void cTemplateView::Debug(void) {
|
||||
|
||||
parameters->Debug();
|
||||
|
||||
for (map < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
for (multimap < eViewElement, cTemplateViewElement* >::iterator it = viewElements.begin(); it != viewElements.end(); it++) {
|
||||
esyslog("skindesigner: ++++++++ ViewElement: %s", GetViewElementName(it->first).c_str());
|
||||
cTemplateViewElement *viewElement = it->second;
|
||||
viewElement->Debug();
|
||||
}
|
||||
|
||||
for (map < eViewList, cTemplateViewList* >::iterator it = viewLists.begin(); it != viewLists.end(); it++) {
|
||||
for (multimap < eViewList, cTemplateViewList* >::iterator it = viewLists.begin(); it != viewLists.end(); it++) {
|
||||
esyslog("skindesigner: ++++++++ ViewList: %s", GetViewListName(it->first).c_str());
|
||||
cTemplateViewList *viewList = it->second;
|
||||
viewList->Debug();
|
||||
@ -787,6 +798,7 @@ void cTemplateView::SetFunctionDefinitions(void) {
|
||||
attributes.insert("width");
|
||||
attributes.insert("height");
|
||||
attributes.insert("align");
|
||||
attributes.insert("valign");
|
||||
attributes.insert("maxlines");
|
||||
attributes.insert("font");
|
||||
attributes.insert("fontsize");
|
||||
@ -1008,7 +1020,7 @@ string cTemplateViewChannel::GetViewElementName(eViewElement ve) {
|
||||
return name;
|
||||
}
|
||||
|
||||
void cTemplateViewChannel::AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<stringpair> &viewElementattributes) {
|
||||
void cTemplateViewChannel::AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {
|
||||
eViewElement ve = veUndefined;
|
||||
|
||||
if (!sViewElement.compare("background")) {
|
||||
@ -1055,17 +1067,7 @@ void cTemplateViewChannel::AddPixmap(string sViewElement, cTemplatePixmapNode *p
|
||||
return;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(viewElementattributes);
|
||||
viewElement->AddPixmap(pix);
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
@ -1246,6 +1248,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) {
|
||||
attributes.insert("menuitemwidth");
|
||||
attributes.insert("determinatefont");
|
||||
attributes.insert("numlistelements");
|
||||
attributes.insert("condition");
|
||||
funcsAllowed.insert(pair< string, set<string> >("menuitems", attributes));
|
||||
|
||||
//definition of allowed parameters for currentitems viewlist
|
||||
@ -1516,7 +1519,7 @@ void cTemplateViewMenu::AddPluginView(string plugName, int templNo, cTemplateVie
|
||||
}
|
||||
}
|
||||
|
||||
void cTemplateViewMenu::AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes) {
|
||||
void cTemplateViewMenu::AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {
|
||||
eViewElement ve = veUndefined;
|
||||
|
||||
if (!sViewElement.compare("background")) {
|
||||
@ -1568,20 +1571,7 @@ void cTemplateViewMenu::AddPixmap(string sViewElement, cTemplatePixmapNode *pix,
|
||||
return;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(viewElementattributes);
|
||||
if (viewElement->DebugTokens()) {
|
||||
dsyslog("skindesigner: activating token debugging for view element %s", sViewElement.c_str());
|
||||
}
|
||||
viewElement->AddPixmap(pix);
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
}
|
||||
|
||||
void cTemplateViewMenu::AddViewList(string sViewList, cTemplateViewList *viewList) {
|
||||
@ -1657,7 +1647,7 @@ string cTemplateViewMessage::GetViewElementName(eViewElement ve) {
|
||||
return name;
|
||||
}
|
||||
|
||||
void cTemplateViewMessage::AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes) {
|
||||
void cTemplateViewMessage::AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {
|
||||
eViewElement ve = veUndefined;
|
||||
|
||||
if (!sViewElement.compare("background")) {
|
||||
@ -1671,17 +1661,7 @@ void cTemplateViewMessage::AddPixmap(string sViewElement, cTemplatePixmapNode *p
|
||||
return;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(viewElementattributes);
|
||||
viewElement->AddPixmap(pix);
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
@ -1814,7 +1794,7 @@ string cTemplateViewReplay::GetViewElementName(eViewElement ve) {
|
||||
return name;
|
||||
}
|
||||
|
||||
void cTemplateViewReplay::AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes) {
|
||||
void cTemplateViewReplay::AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {
|
||||
eViewElement ve = veUndefined;
|
||||
|
||||
if (!sViewElement.compare("background")) {
|
||||
@ -1864,17 +1844,7 @@ void cTemplateViewReplay::AddPixmap(string sViewElement, cTemplatePixmapNode *pi
|
||||
return;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(viewElementattributes);
|
||||
viewElement->AddPixmap(pix);
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
}
|
||||
|
||||
|
||||
@ -1931,7 +1901,7 @@ string cTemplateViewVolume::GetViewElementName(eViewElement ve) {
|
||||
return name;
|
||||
}
|
||||
|
||||
void cTemplateViewVolume::AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes) {
|
||||
void cTemplateViewVolume::AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {
|
||||
eViewElement ve = veUndefined;
|
||||
|
||||
if (!sViewElement.compare("background")) {
|
||||
@ -1945,17 +1915,7 @@ void cTemplateViewVolume::AddPixmap(string sViewElement, cTemplatePixmapNode *pi
|
||||
return;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(viewElementattributes);
|
||||
viewElement->AddPixmap(pix);
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
@ -2041,7 +2001,7 @@ string cTemplateViewAudioTracks::GetViewListName(eViewList vl) {
|
||||
return name;
|
||||
}
|
||||
|
||||
void cTemplateViewAudioTracks::AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes) {
|
||||
void cTemplateViewAudioTracks::AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {
|
||||
eViewElement ve = veUndefined;
|
||||
|
||||
if (!sViewElement.compare("background")) {
|
||||
@ -2055,17 +2015,7 @@ void cTemplateViewAudioTracks::AddPixmap(string sViewElement, cTemplatePixmapNod
|
||||
return;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(viewElementattributes);
|
||||
viewElement->AddPixmap(pix);
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
}
|
||||
|
||||
void cTemplateViewAudioTracks::AddViewList(string sViewList, cTemplateViewList *viewList) {
|
||||
@ -2148,18 +2098,12 @@ void cTemplateViewPlugin::AddSubView(string sSubView, cTemplateView *subView) {
|
||||
subViews.insert(pair< eSubView, cTemplateView* >((eSubView)subViewId, subView));
|
||||
}
|
||||
|
||||
void cTemplateViewPlugin::AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes) {
|
||||
void cTemplateViewPlugin::AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {
|
||||
eViewElement ve = veUndefined;
|
||||
string viewElementName = "";
|
||||
int viewElementID = -1;
|
||||
bool found = false;
|
||||
for (vector<pair<string, string> >::iterator it = viewElementattributes.begin(); it != viewElementattributes.end(); it++) {
|
||||
if (!(it->first).compare("name")) {
|
||||
viewElementName = it->second;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool found = viewElement->GetName(viewElementName);
|
||||
|
||||
if (found) {
|
||||
viewElementID = config.GetPluginViewElementID(pluginName, viewElementName, viewID);
|
||||
@ -2178,30 +2122,14 @@ void cTemplateViewPlugin::AddPixmap(string sViewElement, cTemplatePixmapNode *pi
|
||||
viewElementID = pve;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
ve = (eViewElement)viewElementID;
|
||||
map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve);
|
||||
if (hit == viewElements.end()) {
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(viewElementattributes);
|
||||
viewElement->AddPixmap(pix);
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewElements.insert(pair< eViewElement, cTemplateViewElement*>(ve, viewElement));
|
||||
}
|
||||
|
||||
void cTemplateViewPlugin::AddPixmapGrid(cTemplatePixmapNode *pix, vector<pair<string, string> > &gridAttributes) {
|
||||
void cTemplateViewPlugin::AddGrid(cTemplateViewGrid *viewGrid) {
|
||||
string gridName = "";
|
||||
bool found = false;
|
||||
for (vector<pair<string, string> >::iterator it = gridAttributes.begin(); it != gridAttributes.end(); it++) {
|
||||
if (!(it->first).compare("name")) {
|
||||
gridName = it->second;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
bool found = viewGrid->GetName(gridName);
|
||||
|
||||
if (!found) {
|
||||
esyslog("skindesigner: no name defined for plugin %s grid", pluginName.c_str());
|
||||
}
|
||||
@ -2212,17 +2140,7 @@ void cTemplateViewPlugin::AddPixmapGrid(cTemplatePixmapNode *pix, vector<pair<st
|
||||
return;
|
||||
}
|
||||
|
||||
pix->SetGlobals(globals);
|
||||
|
||||
map < int, cTemplateViewGrid* >::iterator hit = viewGrids.find(gridID);
|
||||
if (hit == viewGrids.end()) {
|
||||
cTemplateViewGrid *viewGrid = new cTemplateViewGrid();
|
||||
viewGrid->SetParameters(gridAttributes);
|
||||
viewGrid->AddPixmap(pix);
|
||||
viewGrids.insert(pair< int, cTemplateViewGrid*>(gridID, viewGrid));
|
||||
} else {
|
||||
(hit->second)->AddPixmap(pix);
|
||||
}
|
||||
viewGrids.insert(pair< int, cTemplateViewGrid*>(gridID, viewGrid));
|
||||
}
|
||||
|
||||
void cTemplateViewPlugin::AddViewTab(cTemplateViewTab *viewTab) {
|
||||
|
@ -49,8 +49,8 @@ protected:
|
||||
int containerWidth;
|
||||
int containerHeight;
|
||||
//basic view data structures
|
||||
map < eViewElement, cTemplateViewElement* > viewElements;
|
||||
map < eViewList, cTemplateViewList* > viewLists;
|
||||
multimap < eViewElement, cTemplateViewElement* > viewElements;
|
||||
multimap < eViewList, cTemplateViewList* > viewLists;
|
||||
map < int, cTemplateViewGrid* > viewGrids;
|
||||
map < eSubView, cTemplateView* > subViews;
|
||||
vector< cTemplateViewTab* > viewTabs;
|
||||
@ -76,8 +76,8 @@ public:
|
||||
virtual string GetViewListName(eViewList vl) { return ""; };
|
||||
virtual void AddSubView(string sSubView, cTemplateView *subView) {};
|
||||
virtual void AddPluginView(string plugName, int templNo, cTemplateView *plugView) {};
|
||||
virtual void AddPixmap(string sViewElement, cTemplatePixmapNode *pix, vector<stringpair> &viewElementattributes) {};
|
||||
virtual void AddPixmapGrid(cTemplatePixmapNode *pix, vector<pair<string, string> > &gridAttributes) {};
|
||||
virtual void AddViewElement(string sViewElement, cTemplateViewElement *viewElement) {};
|
||||
virtual void AddGrid(cTemplateViewGrid *viewGrid) {};
|
||||
virtual void AddViewList(string sViewList, cTemplateViewList *viewList) {};
|
||||
virtual void AddViewTab(cTemplateViewTab *viewTab) {};
|
||||
//Setter Functions
|
||||
@ -151,7 +151,7 @@ public:
|
||||
cTemplateViewChannel(void);
|
||||
virtual ~cTemplateViewChannel(void);
|
||||
string GetViewElementName(eViewElement ve);
|
||||
void AddPixmap(string viewElement, cTemplatePixmapNode *pix, vector<stringpair> &viewElementattributes);
|
||||
void AddViewElement(string sViewElement, cTemplateViewElement *viewElement);
|
||||
};
|
||||
|
||||
// --- cTemplateViewMenu -------------------------------------------------------------
|
||||
@ -169,7 +169,7 @@ public:
|
||||
string GetViewListName(eViewList vl);
|
||||
void AddSubView(string sSubView, cTemplateView *subView);
|
||||
void AddPluginView(string plugName, int templNo, cTemplateView *plugView);
|
||||
void AddPixmap(string viewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes);
|
||||
void AddViewElement(string sViewElement, cTemplateViewElement *viewElement);
|
||||
void AddViewList(string sViewList, cTemplateViewList *viewList);
|
||||
void AddViewTab(cTemplateViewTab *viewTab);
|
||||
};
|
||||
@ -183,7 +183,7 @@ public:
|
||||
cTemplateViewMessage(void);
|
||||
virtual ~cTemplateViewMessage(void);
|
||||
string GetViewElementName(eViewElement ve);
|
||||
void AddPixmap(string viewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes);
|
||||
void AddViewElement(string sViewElement, cTemplateViewElement *viewElement);
|
||||
};
|
||||
|
||||
// --- cTemplateViewReplay -------------------------------------------------------------
|
||||
@ -195,7 +195,7 @@ public:
|
||||
cTemplateViewReplay(void);
|
||||
virtual ~cTemplateViewReplay(void);
|
||||
string GetViewElementName(eViewElement ve);
|
||||
void AddPixmap(string viewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes);
|
||||
void AddViewElement(string sViewElement, cTemplateViewElement *viewElement);
|
||||
};
|
||||
|
||||
// --- cTemplateViewVolume -------------------------------------------------------------
|
||||
@ -207,7 +207,7 @@ public:
|
||||
cTemplateViewVolume(void);
|
||||
virtual ~cTemplateViewVolume(void);
|
||||
string GetViewElementName(eViewElement ve);
|
||||
void AddPixmap(string viewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes);
|
||||
void AddViewElement(string sViewElement, cTemplateViewElement *viewElement);
|
||||
};
|
||||
|
||||
// --- cTemplateViewAudioTracks -------------------------------------------------------------
|
||||
@ -221,7 +221,7 @@ public:
|
||||
virtual ~cTemplateViewAudioTracks(void);
|
||||
string GetViewElementName(eViewElement ve);
|
||||
string GetViewListName(eViewList vl);
|
||||
void AddPixmap(string viewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes);
|
||||
void AddViewElement(string sViewElement, cTemplateViewElement *viewElement);
|
||||
void AddViewList(string sViewList, cTemplateViewList *viewList);
|
||||
};
|
||||
|
||||
@ -235,8 +235,8 @@ public:
|
||||
cTemplateViewPlugin(string pluginName, int viewID);
|
||||
virtual ~cTemplateViewPlugin(void);
|
||||
void AddSubView(string sSubView, cTemplateView *subView);
|
||||
void AddPixmap(string viewElement, cTemplatePixmapNode *pix, vector<pair<string, string> > &viewElementattributes);
|
||||
void AddPixmapGrid(cTemplatePixmapNode *pix, vector<pair<string, string> > &gridAttributes);
|
||||
void AddViewElement(string sViewElement, cTemplateViewElement *viewElement);
|
||||
void AddGrid(cTemplateViewGrid *viewGrid);
|
||||
void AddViewTab(cTemplateViewTab *viewTab);
|
||||
};
|
||||
|
||||
|
@ -97,6 +97,15 @@ int cTemplateViewElement::GetNumPixmaps(void) {
|
||||
return numPixmaps;
|
||||
};
|
||||
|
||||
bool cTemplateViewElement::GetName(string &name) {
|
||||
if (!parameters)
|
||||
return false;
|
||||
name = parameters->GetParameter(ptName);
|
||||
if (name.size() > 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void cTemplateViewElement::InitPixmapNodeIterator(void) {
|
||||
pixmapNodeIterator = viewPixmapNodes.begin();
|
||||
}
|
||||
|
@ -111,6 +111,7 @@ public:
|
||||
void SetPixOffset(int offset) { pixOffset = offset; };
|
||||
int GetPixOffset(void) { return pixOffset; };
|
||||
virtual int GetNumPixmaps(void);
|
||||
bool GetName(string &name);
|
||||
void InitPixmapNodeIterator(void);
|
||||
cTemplatePixmapNode *GetNextPixmapNode(void);
|
||||
void InitPixmapIterator(void);
|
||||
|
@ -25,9 +25,7 @@ void cTemplateViewList::SetGlobals(cGlobals *globals) {
|
||||
bool cTemplateViewList::CalculateListParameters(void) {
|
||||
if (!parameters)
|
||||
return false;
|
||||
parameters->SetContainer(containerX, containerY, containerWidth, containerHeight);
|
||||
parameters->SetGlobals(globals);
|
||||
bool paramsValid = parameters->CalculateParameters();
|
||||
bool paramsValid = false;
|
||||
if (!listElement)
|
||||
return false;
|
||||
listElement->SetContainer(parameters->GetNumericParameter(ptX),
|
||||
@ -67,6 +65,13 @@ bool cTemplateViewList::CalculateListParameters(map < string, int > *intTokens)
|
||||
return paramsValid;
|
||||
}
|
||||
|
||||
eOrientation cTemplateViewList::GetOrientation(void) {
|
||||
if (!parameters)
|
||||
return orNone;
|
||||
int orientation = parameters->GetNumericParameter(ptOrientation);
|
||||
return (eOrientation)orientation;
|
||||
}
|
||||
|
||||
int cTemplateViewList::GetAverageFontWidth(void) {
|
||||
int defaultAverageFontWidth = 20;
|
||||
|
||||
|
@ -36,6 +36,7 @@ public:
|
||||
bool CalculateListParameters(map < string, int > *intTokens);
|
||||
cTemplateViewElement *GetListElement(void) { return listElement; };
|
||||
cTemplateViewElement *GetListElementCurrent(void) { return currentElement; };
|
||||
eOrientation GetOrientation(void);
|
||||
int GetAverageFontWidth(void);
|
||||
cFont *GetTextAreaFont(void);
|
||||
int GetMenuItemWidth(void);
|
||||
|
@ -199,12 +199,16 @@ void cXmlParser::ParseViewElement(cTemplateView *subView) {
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
const char *viewElement = NodeName();
|
||||
const char *viewElementName = NodeName();
|
||||
vector<stringpair> attributes = ParseAttributes();
|
||||
ValidateAttributes("viewelement", attributes);
|
||||
|
||||
if (!LevelDown())
|
||||
return;
|
||||
|
||||
cTemplateViewElement *viewElement = new cTemplateViewElement();
|
||||
viewElement->SetParameters(attributes);
|
||||
|
||||
do {
|
||||
if (!CheckNodeName("areacontainer") && !CheckNodeName("area") && !CheckNodeName("areascroll")) {
|
||||
esyslog("skindesigner: invalid tag \"%s\" in viewelement", NodeName());
|
||||
@ -216,12 +220,15 @@ void cXmlParser::ParseViewElement(cTemplateView *subView) {
|
||||
} else {
|
||||
pix = ParseAreaContainer();
|
||||
}
|
||||
if (subView)
|
||||
subView->AddPixmap(viewElement, pix, attributes);
|
||||
else
|
||||
view->AddPixmap(viewElement, pix, attributes);
|
||||
pix->SetGlobals(globals);
|
||||
viewElement->AddPixmap(pix);
|
||||
} while (NextNode());
|
||||
LevelUp();
|
||||
|
||||
if (subView)
|
||||
subView->AddViewElement(viewElementName, viewElement);
|
||||
else
|
||||
view->AddViewElement(viewElementName, viewElement);
|
||||
}
|
||||
|
||||
void cXmlParser::ParseViewList(cTemplateView *subView) {
|
||||
@ -323,6 +330,10 @@ void cXmlParser::ParseGrid(void) {
|
||||
|
||||
if (!LevelDown())
|
||||
return;
|
||||
|
||||
cTemplateViewGrid *viewGrid = new cTemplateViewGrid();
|
||||
viewGrid->SetParameters(attributes);
|
||||
|
||||
do {
|
||||
|
||||
if (!CheckNodeName("areacontainer") && !CheckNodeName("area") && !CheckNodeName("areascroll")) {
|
||||
@ -335,9 +346,12 @@ void cXmlParser::ParseGrid(void) {
|
||||
} else {
|
||||
pix = ParseAreaContainer();
|
||||
}
|
||||
view->AddPixmapGrid(pix, attributes);
|
||||
pix->SetGlobals(globals);
|
||||
viewGrid->AddPixmap(pix);
|
||||
} while (NextNode());
|
||||
LevelUp();
|
||||
|
||||
view->AddGrid(viewGrid);
|
||||
}
|
||||
|
||||
cTemplatePixmap *cXmlParser::ParseArea(void) {
|
||||
@ -579,15 +593,17 @@ void cXmlParser::ParseSetupParameter(void) {
|
||||
string attributeMax = "max";
|
||||
string paramMax = "";
|
||||
string paramValue = "";
|
||||
string attributeOptions = "options";
|
||||
string paramOptions="";
|
||||
|
||||
GetAttribute(attributeType, paramType);
|
||||
GetAttribute(attributeName, paramName);
|
||||
GetAttribute(attributeDisplayText, paramDisplayText);
|
||||
GetAttribute(attributeMin, paramMin);
|
||||
GetAttribute(attributeMax, paramMax);
|
||||
GetAttribute(attributeOptions, paramOptions);
|
||||
GetNodeValue(paramValue);
|
||||
|
||||
skinSetup->SetParameter(paramType, paramName, paramDisplayText, paramMin, paramMax, paramValue);
|
||||
skinSetup->SetParameter(paramType, paramName, paramDisplayText, paramMin, paramMax, paramValue, paramOptions);
|
||||
}
|
||||
|
||||
void cXmlParser::ValidateAttributes(const char *nodeName, vector<stringpair> &attributes) {
|
||||
|
79
patches/vdr-2.2.0_horizontal_menu.patch
Normal file
79
patches/vdr-2.2.0_horizontal_menu.patch
Normal file
@ -0,0 +1,79 @@
|
||||
Common subdirectories: vdr-2.2.0/PLUGINS and /usr/local/src/vdr-2.2.0/PLUGINS
|
||||
Common subdirectories: vdr-2.2.0/libsi and /usr/local/src/vdr-2.2.0/libsi
|
||||
diff -upN '--exclude=Make.config' vdr-2.2.0/osdbase.c /usr/local/src/vdr-2.2.0/osdbase.c
|
||||
--- vdr-2.2.0/osdbase.c 2015-01-15 11:11:11.000000000 +0100
|
||||
+++ /usr/local/src/vdr-2.2.0/osdbase.c 2015-08-06 17:27:18.778646643 +0200
|
||||
@@ -87,6 +87,7 @@ cOsdMenu::cOsdMenu(const char *Title, in
|
||||
title = NULL;
|
||||
menuCategory = mcUnknown;
|
||||
menuSortMode = msmUnknown;
|
||||
+ menuOrientation = moVertical;
|
||||
SetTitle(Title);
|
||||
SetCols(c0, c1, c2, c3, c4);
|
||||
first = 0;
|
||||
@@ -231,6 +232,7 @@ void cOsdMenu::Display(void)
|
||||
if (menuCategory != displayMenu->MenuCategory())
|
||||
displayMenu->SetMenuCategory(menuCategory);
|
||||
displayMenu->SetMenuSortMode(menuSortMode);
|
||||
+ menuOrientation = displayMenu->MenuOrientation();
|
||||
displayMenuItems = displayMenu->MaxItems();
|
||||
displayMenu->SetTabs(cols[0], cols[1], cols[2], cols[3], cols[4]);//XXX
|
||||
displayMenu->SetTitle(title);
|
||||
@@ -541,13 +543,13 @@ eOSState cOsdMenu::ProcessKey(eKeys Key)
|
||||
case k0: return osUnknown;
|
||||
case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
|
||||
case kUp|k_Repeat:
|
||||
- case kUp: CursorUp(); break;
|
||||
+ case kUp: if (menuOrientation == moHorizontal) PageUp(); else CursorUp(); break;
|
||||
case kDown|k_Repeat:
|
||||
- case kDown: CursorDown(); break;
|
||||
+ case kDown: if (menuOrientation == moHorizontal) PageDown(); else CursorDown(); break;
|
||||
case kLeft|k_Repeat:
|
||||
- case kLeft: PageUp(); break;
|
||||
+ case kLeft: if (menuOrientation == moHorizontal) CursorUp(); else PageUp(); break;
|
||||
case kRight|k_Repeat:
|
||||
- case kRight: PageDown(); break;
|
||||
+ case kRight: if (menuOrientation == moHorizontal) CursorDown(); else PageDown(); break;
|
||||
case kBack: return osBack;
|
||||
case kOk: if (marked >= 0) {
|
||||
SetStatus(NULL);
|
||||
diff -upN '--exclude=Make.config' vdr-2.2.0/osdbase.h /usr/local/src/vdr-2.2.0/osdbase.h
|
||||
--- vdr-2.2.0/osdbase.h 2015-01-15 11:09:18.000000000 +0100
|
||||
+++ /usr/local/src/vdr-2.2.0/osdbase.h 2015-07-31 15:23:29.232867174 +0200
|
||||
@@ -93,6 +93,7 @@ private:
|
||||
int first, current, marked;
|
||||
eMenuCategory menuCategory;
|
||||
eMenuSortMode menuSortMode;
|
||||
+ eMenuOrientation menuOrientation;
|
||||
cOsdMenu *subMenu;
|
||||
const char *helpRed, *helpGreen, *helpYellow, *helpBlue;
|
||||
bool helpDisplayed;
|
||||
Common subdirectories: vdr-2.2.0/po and /usr/local/src/vdr-2.2.0/po
|
||||
diff -upN '--exclude=Make.config' vdr-2.2.0/skins.h /usr/local/src/vdr-2.2.0/skins.h
|
||||
--- vdr-2.2.0/skins.h 2015-01-15 11:45:47.000000000 +0100
|
||||
+++ /usr/local/src/vdr-2.2.0/skins.h 2015-08-06 17:33:41.500188153 +0200
|
||||
@@ -129,6 +129,12 @@ enum eMenuSortMode {
|
||||
msmProvider
|
||||
};
|
||||
|
||||
+#define MENU_ORIENTATION_DEFINED 1
|
||||
+enum eMenuOrientation {
|
||||
+ moVertical = 0,
|
||||
+ moHorizontal
|
||||
+ };
|
||||
+
|
||||
class cSkinDisplayMenu : public cSkinDisplay {
|
||||
///< This class implements the general purpose menu display, which is
|
||||
///< used throughout the program to display information and let the
|
||||
@@ -179,6 +185,10 @@ public:
|
||||
///< Sets the mode by which the items in this menu are sorted.
|
||||
///< This is purely informative and may be used by a skin to display the
|
||||
///< current sort mode by means of some text or symbol.
|
||||
+ virtual eMenuOrientation MenuOrientation(void) { return moVertical; }
|
||||
+ ///< Asks the skin for the orientation of the displayed menu
|
||||
+ ///< If menu orientation is set to horizontal, the keys left / right
|
||||
+ ///< and up / down are just toggled
|
||||
virtual void Scroll(bool Up, bool Page);
|
||||
///< If this menu contains a text area that can be scrolled, this function
|
||||
///< will be called to actually scroll the text. Up indicates whether the
|
||||
Common subdirectories: vdr-2.2.0/symbols and /usr/local/src/vdr-2.2.0/symbols
|
2
setup.c
2
setup.c
@ -471,6 +471,8 @@ void cSkindesignerSkinSetup::Set(void) {
|
||||
Add(new cMenuEditIntItem(param->displayText.c_str(), ¶m->value, param->min, param->max));
|
||||
} else if (param->type == sptBool) {
|
||||
Add(new cMenuEditBoolItem(param->displayText.c_str(), ¶m->value));
|
||||
} else if (param->type == sptString) {
|
||||
Add(new cMenuEditStraItem(param->displayText.c_str(), ¶m->value, param->numOptions, param->optionsTranslated));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,9 @@
|
||||
<parameter type="int" name="shifttimedatetime" min="0" max="1000" displaytext="{tr(shifttimedatetimetext)}">0</parameter>
|
||||
<parameter type="int" name="shifttimetimers" min="0" max="1000" displaytext="{tr(shifttimetimerstext)}">0</parameter>
|
||||
<parameter type="bool" name="showdevices" displaytext="{tr(showdevices)}">0</parameter>
|
||||
<parameter type="string" name="mainmenuorientation" displaytext="{tr(mainmenuorientation)}" options="horizontal,vertical">1</parameter>
|
||||
<parameter type="string" name="recmenuorientation" displaytext="{tr(recmenuorientation)}" options="horizontal,vertical">1</parameter>
|
||||
<parameter type="string" name="weathermenuorientation" displaytext="{tr(weathermenuorientation)}" options="horizontal,vertical">1</parameter>
|
||||
</menu>
|
||||
|
||||
<translations>
|
||||
@ -33,5 +36,25 @@
|
||||
<trans lang="de_DE">DVB Karten Info beim Umschalten anzeigen</trans>
|
||||
<trans lang="fi_FI">Näytä DVB-tiedot kanavanvaihdossa</trans>
|
||||
</token>
|
||||
<token name="tr(mainmenuorientation)">
|
||||
<trans lang="en_EN">Orientation of main menu</trans>
|
||||
<trans lang="de_DE">Ausrichtung des Hauptmenüs</trans>
|
||||
</token>
|
||||
<token name="tr(recmenuorientation)">
|
||||
<trans lang="en_EN">Orientation of recordings menu</trans>
|
||||
<trans lang="de_DE">Ausrichtung des Aufzeichnugsmenüs</trans>
|
||||
</token>
|
||||
<token name="tr(weathermenuorientation)">
|
||||
<trans lang="en_EN">Orientation of weatherforecast menu</trans>
|
||||
<trans lang="de_DE">Ausrichtung des Wettermenüs</trans>
|
||||
</token>
|
||||
<token name="tr(horizontal)">
|
||||
<trans lang="en_EN">horizontal menu</trans>
|
||||
<trans lang="de_DE">horizontales Menü</trans>
|
||||
</token>
|
||||
<token name="tr(vertical)">
|
||||
<trans lang="en_EN">vertical menu</trans>
|
||||
<trans lang="de_DE">vertikales Menü</trans>
|
||||
</token>
|
||||
</translations>
|
||||
</setup>
|
||||
|
@ -2,19 +2,12 @@
|
||||
<!DOCTYPE displayaudiotracks SYSTEM "../../../dtd/displayaudiotracks.dtd">
|
||||
|
||||
<displayaudiotracks x="25%" y="0" width="50%" height="100%" fadetime="{fadetime}">
|
||||
<!-- Available Variables background:
|
||||
{numtracks} number of displayed tracks
|
||||
-->
|
||||
<background>
|
||||
<area x="0" y="{areaheight} - {numtracks} * {areaheight} / 10 - {areaheight} / 10" width="100%" height="{areaheight} / 10 + {areaheight} / 10 * {numtracks}" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
</area>
|
||||
</background>
|
||||
|
||||
<!-- Available Variables header:
|
||||
{numtracks} number of displayed tracks
|
||||
{title} title of menu
|
||||
-->
|
||||
|
||||
<header>
|
||||
<area x="0" y="{areaheight} - {numtracks} * {areaheight} / 10 - {areaheight} / 10" width="100%" height="{areaheight} / 10" layer="2">
|
||||
<drawtext x="10" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
@ -22,15 +15,8 @@
|
||||
<drawimage condition="{isac3}" imagetype="icon" path="ico_ac3" x="{areawidth} - {areaheight}*0.9" valign="center" width="{areaheight}*0.9" height="{areaheight}*0.9"/>
|
||||
</area>
|
||||
</header>
|
||||
|
||||
<!-- Available Variables header:
|
||||
{numelements} number of displayed tracks
|
||||
-->
|
||||
|
||||
<menuitems x="0" y="{areaheight} - {numelements} * {areaheight} / 10" orientation="vertical" width="100%" height="{numelements} * {areaheight} / 10" align="top" numlistelements="{numelements}">
|
||||
<!-- Available Variables auidotrack listelement:
|
||||
{current} true if item is currently selected
|
||||
{title} title of auio track
|
||||
-->
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area x="1%" width="98%" layer="2">
|
||||
|
@ -13,13 +13,6 @@
|
||||
</area>
|
||||
</background>
|
||||
|
||||
<!-- Available Variables channelinfo:
|
||||
{channelnumber} Number of Channel, with "-" in case of channel switching
|
||||
{channelname} Name of current Channel
|
||||
{channellogoexists} true if a channel logo exists
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{switching} true if a number is pressed on the remote to switch to a dedicated channel
|
||||
-->
|
||||
<channelinfo>
|
||||
<area x="22%" y="80%" width="76%" height="7%" layer="2">
|
||||
<fill condition="not{switching}" color="{clrTransparent}" />
|
||||
@ -30,27 +23,7 @@
|
||||
<drawtext condition="not{channellogoexists}" x="5" valign="center" font="{light}" fontsize="40%" color="{clrWhite}" text="{channelnumber}: {channelname}" />
|
||||
</area>
|
||||
</channelinfo>
|
||||
<!-- Available Variables epginfo:
|
||||
{currenttitle} Title of the current Schedule
|
||||
{currentsubtitle} Subtitle of the current Schedule
|
||||
{currentstart} Start of current Schedule in hh:mm
|
||||
{currentstop} End of current Schedule in hh:mm
|
||||
{currentduration} Duration of current Schedule in min
|
||||
{currentdurationhours} Duration, full hours
|
||||
{currentdurationminutes} Duration, rest of minutes
|
||||
{currentelapsed} Elapsed time of current Schedule in min
|
||||
{currentremaining} Remaining time of current Schedule in min
|
||||
{currentrecording} true if current Schedule is recorded
|
||||
{hasVPS} true if current Schedule has VPS
|
||||
{nexttitle} Title of next Schedule
|
||||
{nextsubtitle} Subtitle of next Schedule
|
||||
{nextstart} Start of next Schedule in hh:mm
|
||||
{nextstop} Stop of next Schedule in hh:mm
|
||||
{nextduration} Duration of next Schedule in min
|
||||
{nextdurationhours} Duration, full hours
|
||||
{nextdurationminutes} Duration, rest of minutes
|
||||
{nextrecording} true if next Schedule will be recorded
|
||||
-->
|
||||
|
||||
<epginfo>
|
||||
<area x="22%" y="80%" width="76%" height="7%" layer="2">
|
||||
<drawtext name="title" x="0" valign="center" font="{light}" fontsize="99%" color="{clrWhite}" text="{currenttitle}" width="{areawidth} - {width(startstop)}"/>
|
||||
@ -64,15 +37,6 @@
|
||||
</area>
|
||||
</epginfo>
|
||||
|
||||
<!-- Available Variables progressbar:
|
||||
{start} Start of current Schedule in hh:mm
|
||||
{stop} End of current Schedule in hh:mm
|
||||
{duration} Total Duration of current Schedule in seconds
|
||||
{elapsed} Elapsed time of current Schedule in seconds
|
||||
{remaining} Remaining time of current Schedule in seconds
|
||||
{permashift} true if permashift plugin is in use
|
||||
{livebuffer} current buffered data in seconds
|
||||
-->
|
||||
<progressbar>
|
||||
<area condition="not{permashift}" x="22%" y="87%" width="76%" height="3" layer="2">
|
||||
<drawrectangle x="0" y="1" width="100%" height="1" color="{clrWhite}" />
|
||||
@ -85,15 +49,6 @@
|
||||
</area>
|
||||
</progressbar>
|
||||
|
||||
<!-- Available Variables statusinfo:
|
||||
{isRadio} true if channel is a radio channel
|
||||
{hasVT} true if channel has video text
|
||||
{isStereo} true if a stereo audio trac is available
|
||||
{isDolby} true if a dolby audio track is available
|
||||
{isEncrypted} true if channel is encrypted
|
||||
{isRecording} true if currently a recording is running on this channel
|
||||
{newmails} true if mailbox plugin is installed and new mails are available
|
||||
-->
|
||||
<statusinfo>
|
||||
<area x="22%" y="94%" width="76%" height="6%" layer="2">
|
||||
<!-- encrypted / decrypted icon -->
|
||||
@ -111,23 +66,9 @@
|
||||
</area>
|
||||
</statusinfo>
|
||||
|
||||
<!-- Available Variables audioinfo:
|
||||
{numaudiotracks} number of available audio tracks for current channel
|
||||
{audiochannel} 0 if current channel is stereo, 1 for left chanel only, 2 for right channel only
|
||||
{trackdesc} description of the current audio track
|
||||
{tracklang} language of the current audio track
|
||||
-->
|
||||
<audioinfo>
|
||||
</audioinfo>
|
||||
|
||||
<!-- Available Variables screenresolution:
|
||||
{screenwidth} width of currently displayed channel in px
|
||||
{screenheight} height of currently displayed channel in px
|
||||
{resolution} resolution: hd1080i, hd720p, sd576i
|
||||
{aspect} screen aspect, each 4:3, 16:9 or 21:9
|
||||
{isHD} true for hd1080i and hd720p
|
||||
{isWideScreen} true if aspect is 16:9 or 21:9
|
||||
-->
|
||||
<screenresolution>
|
||||
<area x="22%" y="94%" width="76%" height="6%" layer="2">
|
||||
<!-- widescreen icon -->
|
||||
@ -141,15 +82,6 @@
|
||||
</area>
|
||||
</screenresolution>
|
||||
|
||||
<!-- Available Variables dvbdeviceinfo:
|
||||
{prevAvailable} true if previous Channel Group is avaialble
|
||||
{nextAvailable} true if next Channel Group is avaialble
|
||||
{group} Name of current Channel Group
|
||||
{nextgroup} Name of next Channel Group
|
||||
{prevgroup} Name of prev Channel Group
|
||||
{sepexists} true if a channel separator logo exists
|
||||
{seppath} path for separator logo to use in imagetype "seplogo"
|
||||
-->
|
||||
<channelgroup>
|
||||
<area x="0" y="80%" width="20%" height="20%" layer="2">
|
||||
<drawimage condition="{sepexists}" imagetype="seplogo" path="{seppath}" width="98%" height="98%" align="center" valign="center" />
|
||||
@ -162,37 +94,15 @@
|
||||
</area>
|
||||
</channelgroup>
|
||||
|
||||
<!-- Available Variables signalquality:
|
||||
{signalstrength} STR value of currently displayed channel
|
||||
{signalquality} SNR value of currently displayed channel
|
||||
-->
|
||||
<signalquality>
|
||||
<area x="22%" y="94%" width="76%" height="6%" layer="3">
|
||||
<drawtext x="0" valign="center" font="{light}" fontsize="70%" color="{clrWhite}" text="STR: {signalstrength}% SNR: {signalquality}%" />
|
||||
</area>
|
||||
</signalquality>
|
||||
|
||||
<!-- background of signalmeter, will only be drawn if signalquality was deleted -->
|
||||
<signalqualityback>
|
||||
</signalqualityback>
|
||||
|
||||
<!-- Available Variables devices:
|
||||
{numdevices} number of available devices
|
||||
{devices[]} array with available devices
|
||||
{devices[num]} number of current device
|
||||
{devices[type]} type of device (DVB-S, DVB-C, ...)
|
||||
{devices[istuned]} true if device is currently tuned to a transponder
|
||||
{devices[livetv]} true if device is currently playing livetv
|
||||
{devices[recording]} true if device is currently recording
|
||||
{devices[hascam]} true if device has a CAM
|
||||
{devices[cam]} number of CAM
|
||||
{devices[signalstrength]} signalstrength of devcie
|
||||
{devices[signalquality]} signalstrength of devcie
|
||||
{devices[channelnumber]} number of the currently tuned channel
|
||||
{devices[channelname]} name of the currently tuned channel
|
||||
{devices[channelid]} ID of the currently tuned channel
|
||||
{devices[source]} source of the currently tuned channel
|
||||
-->
|
||||
<devices condition="{showdevices}" detached="true" delay="100" shifttime="{shifttimedatetime}" shifttype="right" shiftmode="slowed">
|
||||
<area x="70%" y="30%" width="30%" height="{areaheight}/12 * {numdevices}" layer="1" background="true">
|
||||
<fill color="{clrTransBlack}"/>
|
||||
@ -211,26 +121,6 @@
|
||||
</area>
|
||||
</devices>
|
||||
|
||||
<!-- Available Variables currentweather:
|
||||
{timestamp} timestamp of forecast in dd.mm hh:mm
|
||||
{temperature} current temperature in °C
|
||||
{apparenttemperature} apparent (feeled) temperature
|
||||
{mintemperature} minimum temperature this day
|
||||
{maxtemperature} maximum temperature this day
|
||||
{summary} short weather summary
|
||||
{icon} weather icon
|
||||
{precipitationintensity} precipitation intensity in l/m2
|
||||
{precipitationprobability} precipitation probability in %
|
||||
{precipitationtype} precipitation type
|
||||
{humidity} humidity in %
|
||||
{windspeed} windspeed in km/h
|
||||
{windbearing} wind bearing in °
|
||||
{windbearingstring} wind bearing (N, NE, ...)
|
||||
{visibility} visibility in km
|
||||
{cloudcover} cloud cover in %
|
||||
{pressure} pressure in HPo
|
||||
{ozone} ozone value in DU
|
||||
-->
|
||||
<currentweather detached="true" delay="100" shifttime="{shifttimedatetime}" shifttype="right" shiftmode="slowed">
|
||||
<area background="true" x="70%" y="15%" width="30%" height="13%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
@ -248,22 +138,6 @@
|
||||
</area>
|
||||
</currentweather>
|
||||
|
||||
<!-- Available Variables scrapercontent:
|
||||
{posterpath} Full Path of Poster to use in image path attribute
|
||||
{posterwidth} width of poster in pixel
|
||||
{posterheight} height of poster in pixel
|
||||
{hasPoster} true if poster is available
|
||||
{bannerpath} Full Path of banner to use in image path attribute
|
||||
{bannerwidth} width of banner in pixel
|
||||
{bannerheight} height of banner in pixel
|
||||
{hasBanner} true if banner is available
|
||||
|
||||
Use this tokens if you want to display a banner for series and a poster for movies:
|
||||
{mediapath} Full Path of Poster or Banner to use in image path attribute
|
||||
{mediawidth} width of image in pixel
|
||||
{mediaheight} height of image in pixel
|
||||
{isbanner} true if image is a banner, false if it is a poster
|
||||
-->
|
||||
<scrapercontent detached="true" delay="0" fadetime="0">
|
||||
<area condition="{isbanner}" x="0" y="0" width="{areaheight}*0.13*{mediawidth}/{mediaheight}" height="13%" layer="2">
|
||||
<drawimage imagetype="image" path="{mediapath}" align="center" valign="center" width="{areawidth}" height="{areaheight}"/>
|
||||
@ -273,17 +147,6 @@
|
||||
</area>
|
||||
</scrapercontent>
|
||||
|
||||
<!-- Available Variables datetime:
|
||||
{time} time in hh:mm
|
||||
{day} day in digits
|
||||
{dayleadingzero} day in digits with leading 0
|
||||
{dayname} Full name of the day
|
||||
{daynameshort} Short 3 char name of the day
|
||||
{month} month in digits with leading 0
|
||||
{monthname} Full name of the month
|
||||
{monthnameshort} 3 letter abbrivation of month name
|
||||
{year} year in yyyy
|
||||
-->
|
||||
<datetime detached="true" delay="100" shifttime="{shifttimedatetime}" shifttype="right" shiftmode="slowed">
|
||||
<area background="true" x="70%" y="0" width="30%" height="13%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
@ -297,13 +160,7 @@
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{time}" />
|
||||
</area>
|
||||
</datetime>
|
||||
<!-- Available Variables message:
|
||||
{text} message text
|
||||
{status} true if message is a status message
|
||||
{info} true if message is a info message
|
||||
{warning} true if message is a warn message
|
||||
{error} true if message is a error message
|
||||
-->
|
||||
|
||||
<message>
|
||||
<area x="10%" y="45%" width="80%" height="10%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
@ -315,11 +172,7 @@
|
||||
</area>
|
||||
</message>
|
||||
|
||||
<!-- Available Variables customtokens:
|
||||
all custom tokens set by the svdrp command SCTK are available in this viewelement
|
||||
For instance, use an appropriate script which runs periodically as cronjob and
|
||||
sets these custom tokens with svdrpsend or dbus2vdr
|
||||
-->
|
||||
<customtokens>
|
||||
</customtokens>
|
||||
|
||||
</displaychannel>
|
||||
|
@ -13,11 +13,7 @@
|
||||
]>
|
||||
|
||||
<displaymenu x="3%" y="5%" width="94%" height="90%" fadetime="0">
|
||||
<!--
|
||||
The following background, header, datetime and colorbuttons definitions are default
|
||||
implementations. If one or more of these elements are not implemented in the subview,
|
||||
the default implementations are used.
|
||||
-->
|
||||
|
||||
<background>
|
||||
<!-- background left Menu -->
|
||||
<area x="0" y="0" width="63%" height="100%" layer="1">
|
||||
@ -28,18 +24,7 @@
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
</area>
|
||||
</background>
|
||||
<!-- Available Variables header:
|
||||
{title} title of current menu
|
||||
{vdrversion} running VDR Version
|
||||
{hasicon} true if a menu icon is available
|
||||
{icon} path of menu icon
|
||||
{freetime} available disc capacity in hh:mm
|
||||
{freepercent} available disc capacity in percent
|
||||
{usedpercent} used disc capacity in percent
|
||||
{freegb} available disc capacity in gigabytes
|
||||
{discalert} true if disc usage is > 95%
|
||||
{vdrusagestring} localized VDR internal usage string
|
||||
-->
|
||||
|
||||
<header>
|
||||
<area x="0" y="0" width="41%" height="10%" layer="2">
|
||||
<drawtext condition="not{hasicon}" x="5" width="{areawidth}-10" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
@ -47,17 +32,7 @@
|
||||
<drawtext condition="{hasicon}" x="{areaheight}" valign="center" width="{areawidth}-{areaheight}-10" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
</area>
|
||||
</header>
|
||||
<!-- Available Variables datetime:
|
||||
{time} time in hh:mm
|
||||
{day} day in digits
|
||||
{dayleadingzero} day in digits with leading 0
|
||||
{dayname} Full name of the day
|
||||
{daynameshort} Short 3 char name of the day
|
||||
{month} month in digits with leading 0
|
||||
{monthname} Full name of the month
|
||||
{monthnameshort} 3 letter abbrivation of month name
|
||||
{year} year in yyyy
|
||||
-->
|
||||
|
||||
<datetime>
|
||||
<area x="41%" y="0" width="12%" height="10%" layer="2">
|
||||
<drawtext align="right" y="5%" font="{light}" fontsize="50%" color="{clrWhite}" text="{dayname}" />
|
||||
@ -67,13 +42,7 @@
|
||||
<drawtext align="center" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{time}" />
|
||||
</area>
|
||||
</datetime>
|
||||
<!-- Available Variables message:
|
||||
{text} message text
|
||||
{status} true if message is an status message
|
||||
{info} true if message is an info message
|
||||
{warning} true if message is an warn message
|
||||
{error} true if message is an error message
|
||||
-->
|
||||
|
||||
<message>
|
||||
<area x="5%" y="75%" width="90%" height="15%" layer="7">
|
||||
<fill color="{clrTransBlack}" />
|
||||
@ -85,12 +54,6 @@
|
||||
</area>
|
||||
</message>
|
||||
|
||||
<!-- Available Variables sortmode:
|
||||
{sortnumber} true if menu is sorted by number
|
||||
{sortname} true if menu is sorted alphabetical
|
||||
{sorttime} true if menu is sorted by time
|
||||
{sortprovider} true if menu is sorted by provider
|
||||
-->
|
||||
<sortmode>
|
||||
<area x="35%" y="2%" width="6%" height="6%" layer="4">
|
||||
<drawimage condition="{sortnumber}" imagetype="icon" path="ico_sort_number" x="0" y="0" width="100%" height="100%"/>
|
||||
@ -99,28 +62,7 @@
|
||||
<drawimage condition="{sortprovider}" imagetype="icon" path="ico_sort_provider" x="0" y="0" width="100%" height="100%"/>
|
||||
</area>
|
||||
</sortmode>
|
||||
<!-- Available Variables colorbuttons:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
|
||||
<colorbuttons>
|
||||
<area x="0" y="92%" width="15%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
|
@ -1,25 +1,5 @@
|
||||
<menuchannels x="0" y="0" width="100%" height="100%" fadetime="0">
|
||||
<menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="16">
|
||||
<!-- Available Variables channels menu listelement:
|
||||
{nummenuitem} number of item in list, starts with 1
|
||||
{number} number of the displayed channel
|
||||
{name} name of the displayed channel
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{transponder} Transponder of channel
|
||||
{frequency} Frequency of channel
|
||||
{source} Source of channel (S, C, T)
|
||||
{sourcedescription} Descriptin of source from sources.conf
|
||||
{position} orbital position of the satellite in case this is a DVB-S source
|
||||
{isAtsc} true if channel is a ATSC channel
|
||||
{isCable} true if channel is cable channel
|
||||
{isSat} true if channel is a satellite channel
|
||||
{isTerr} true if channel is terrestrical
|
||||
{presenteventtitle} title of present event on this channel
|
||||
{presenteventstart} present event start time in hh::mm
|
||||
{presenteventstop} present event event stop time in hh::mm
|
||||
{current} true if item is currently selected
|
||||
{separator} true if item is a list separator
|
||||
-->
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area x="1%" width="58%" layer="2">
|
||||
@ -37,51 +17,6 @@
|
||||
<drawtext x="20" valign="center" font="{light}" fontsize="95%" color="{clrWhite}" text="{name}" />
|
||||
</area>
|
||||
</listelement>
|
||||
<!-- additional element which is drawn for current element -->
|
||||
<!-- Available Variables channels menu currentelement:
|
||||
{number} number of the displayed channel
|
||||
{name} name of the displayed channel
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{transponder} Transponder of channel
|
||||
{frequency} Frequency of channel
|
||||
{source} Source of channel (S, C, T)
|
||||
{sourcedescription} Descriptin of source from sources.conf
|
||||
{position} orbital position of the satellite in case this is a DVB-S source
|
||||
{isAtsc} true if channel is a ATSC channel
|
||||
{isCable} true if channel is cable channel
|
||||
{isSat} true if channel is a satellite channel
|
||||
{isTerr} true if channel is terrestrical
|
||||
{presenteventtitle} title of present event on this channel
|
||||
{presenteventstart} present event start time in hh::mm
|
||||
{presenteventstop} present event stop time in hh::mm
|
||||
{presenteventshorttext} present event short text
|
||||
{presenteventdescription} present event description
|
||||
{presenteventday} present event name of day
|
||||
{presenteventdate} present event date in dd:mm:yy
|
||||
{presenteventelapsed} present event elapsed time
|
||||
{presenteventduration} present event duration
|
||||
{presenteventdurationhours} duration, full hours
|
||||
{presenteventdurationminutes} duration, rest of minutes
|
||||
{hasposter} true if a scraped poster is available for this elements present evemt
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{nexteventtitle} title of next event on this channel
|
||||
{nexteventstart} next event start time in hh::mm
|
||||
{nexteventstop} next event event stop time in hh::mm
|
||||
{nexteventshorttext} next event short text
|
||||
{nexteventdescription} next event description
|
||||
{nexteventday} next event name of day
|
||||
{nexteventdate} next event date in dd:mm:yy
|
||||
{nexteventduration} next event duration
|
||||
{nexteventdurationhours} duration, full hours
|
||||
{nexteventdurationminutes} duration, rest of minutes
|
||||
{schedule[]} array with following 10 schedules
|
||||
{schedule[title]} title of event
|
||||
{schedule[shorttext]} shorttext of event
|
||||
{schedule[start]} start time of event in hh:mm
|
||||
{schedule[stop]} stop time of event in hh:mm
|
||||
-->
|
||||
<currentelement delay="500" fadetime="0">
|
||||
<area x="63%" y="0" width="36%" height="85%" layer="2">
|
||||
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" y="0" width="30%" height="10%" />
|
||||
@ -108,10 +43,6 @@
|
||||
</areascroll>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
<!-- Available Variables colorbuttons:
|
||||
{height} height in one-tenth of a percent of total height
|
||||
{offset} offset from top in one-tenth of a percent of total height
|
||||
-->
|
||||
<scrollbar>
|
||||
<area x="60%" y="10%" width="2%" height="82%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
@ -119,4 +50,4 @@
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
</menuchannels>
|
||||
</menuchannels>
|
||||
|
@ -5,12 +5,7 @@
|
||||
<fill color="{clrTransBlack}" />
|
||||
</area>
|
||||
</background>
|
||||
<!-- Available Variables header:
|
||||
{title} title of current menu
|
||||
{vdrversion} running VDR Version
|
||||
{hasicon} true if a menu icon is available
|
||||
{icon} path of menu icon
|
||||
-->
|
||||
|
||||
<header>
|
||||
<area x="0" y="0" width="75%" height="10%" layer="2">
|
||||
<drawtext condition="not{hasicon}" x="5" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
@ -18,16 +13,7 @@
|
||||
<drawtext condition="{hasicon}" x="{areaheight}" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
</area>
|
||||
</header>
|
||||
<!-- Available Variables datetime:
|
||||
{time} time in hh:mm
|
||||
{day} day in digits
|
||||
{dayleadingzero} day in digits with leading 0
|
||||
{dayname} Full name of the day
|
||||
{daynameshort} Short 3 char name of the day
|
||||
{month} month in digits with leading 0
|
||||
{monthname} Full name of the month
|
||||
{year} year in yyyy
|
||||
-->
|
||||
|
||||
<datetime>
|
||||
<area x="80%" y="0" width="10%" height="10%" layer="2">
|
||||
<drawtext align="right" y="0%" font="{light}" fontsize="50%" color="{clrWhite}" text="{dayname}" />
|
||||
@ -38,28 +24,6 @@
|
||||
</area>
|
||||
</datetime>
|
||||
|
||||
<!-- Available Variables colorbuttons:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
<colorbuttons>
|
||||
<area x="0" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -110,47 +74,8 @@
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
<!-- IMPORTANT: menuitemwidth and determinatefont have to be defined here. menuitemwidth defines the total width of the
|
||||
default menu items, determinatefont the function which sets the actual font to use. With that it is possible to determinate
|
||||
the correct column widths -->
|
||||
|
||||
<menuitems x="0" y="10%" orientation="vertical" width="94%" height="82%" align="center" menuitemwidth="94%" determinatefont="column1" numlistelements="16">
|
||||
<!-- Available Variables default menu listelement:
|
||||
{nummenuitem} number of item in list, starts with 1
|
||||
{column1} text of column1
|
||||
{column2} text of column2
|
||||
{column3} text of column3
|
||||
{column4} text of column4
|
||||
{column5} text of column5
|
||||
{column6} text of column6
|
||||
{column2set} true if column2 is used
|
||||
{column3set} true if column3 is used
|
||||
{column4set} true if column4 is used
|
||||
{column5set} true if column5 is used
|
||||
{column6set} true if column6 is used
|
||||
{column2x} proposed x value of column2
|
||||
{column3x} proposed x value of column3
|
||||
{column4x} proposed x value of column4
|
||||
{column5x} proposed x value of column5
|
||||
{column6x} proposed x value of column6
|
||||
{column1width} proposed width of column1
|
||||
{column2width} proposed width of column2
|
||||
{column3width} proposed width of column3
|
||||
{column4width} proposed width of column4
|
||||
{column5width} proposed width of column5
|
||||
{column6width} proposed width of column6
|
||||
{columnscroll} number of column which should have scrollable text
|
||||
{current} true if column is currently selected
|
||||
{separator} true if column is a list separator
|
||||
|
||||
A dynamic token is set to indicate the current menu category or the plugin which is currently running.
|
||||
With that it is possible to display different default menus with an individual style.
|
||||
If a setup menu is diplayed, the token
|
||||
{setup} is set to true
|
||||
For the commands menu
|
||||
{commands} is set to true
|
||||
If a plugin is running, a token called as the name of the plugin is set to true
|
||||
{pluginname} is set to true
|
||||
-->
|
||||
<listelement>
|
||||
<area x="0" condition="not{separator}" width="100%" layer="2">
|
||||
<fill condition="not{current}" color="{clrTransparent}" />
|
||||
|
@ -21,28 +21,7 @@
|
||||
<fill color="{clrTransparent}" />
|
||||
</area>
|
||||
</datetime>
|
||||
<!-- Available Variables colorbuttons:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
|
||||
<colorbuttons>
|
||||
<area x="0" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -85,38 +64,7 @@
|
||||
<drawrectangle condition="{blue4}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
</colorbuttons>
|
||||
<!-- Available Variables in detailheader elements:
|
||||
{title} title of event
|
||||
{shorttext} shorttext of event
|
||||
{start} event start time in hh::mm
|
||||
{stop} event stop time
|
||||
{day} day of current event
|
||||
{date} date of current event in dd.mm.yy
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{running} true if event is currently running
|
||||
{elapsed} elapsed time of event, if not running 0
|
||||
{duration} duration of event
|
||||
{durationhours} duration, full hours
|
||||
{durationminutes} duration, rest of minutes
|
||||
{vps} vps description string
|
||||
{channelname} Channelname of event
|
||||
{channelnumber} Channelnumber of event
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{ismovie} true if event is scraped as a movie
|
||||
{isseries} true if event is scraped as a series
|
||||
{posteravailable} true if a poster is available
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{banneravailable} true if a banner is available
|
||||
{bannerwidth} width of banner
|
||||
{bannerheight} height of banner
|
||||
{bannerpath} path of banner
|
||||
{epgpicavailable} true if a epg picture is available
|
||||
{epgpicpath} path of epg picture
|
||||
-->
|
||||
|
||||
<detailheader>
|
||||
<area x="1%" y="0" width="98%" height="20%" layer="3">
|
||||
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="15%" height="80%" valign="center" />
|
||||
@ -129,10 +77,7 @@
|
||||
<drawtext name="shorttext" x="{width(logo)} + 20" y="{posy(title)} + {height(title)}" font="{light}" fontsize="25%" color="{clrWhite}" text="{shorttext}" />
|
||||
</area>
|
||||
</detailheader>
|
||||
<!-- Available Variables scrollbar:
|
||||
{height} height in one-tenth of a percent of total height
|
||||
{offset} offset from top in one-tenth of a percent of total height
|
||||
-->
|
||||
|
||||
<scrollbar>
|
||||
<area x="98%" y="20%" width="2%" height="65%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
@ -140,137 +85,6 @@
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
<!-- Available Variables in tab elements:
|
||||
{title} title of event
|
||||
{shorttext} shorttext of event
|
||||
{description} description of event
|
||||
{start} event start time in hh::mm
|
||||
{stop} event stop time
|
||||
{day} Day of event as three letter abrivation
|
||||
{date} Date of event
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{running} true if event is currently running
|
||||
{elapsed} elapsed time of event, if not running 0
|
||||
{duration} duration of event
|
||||
{durationhours} duration, full hours
|
||||
{durationminutes} duration, rest of minutes
|
||||
{vps} vps description string
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{hasreruns} true if reruns of this event are found
|
||||
{reruns[]} array with reruns
|
||||
{reruns[title]} title of rerun
|
||||
{reruns[shorttext]} shorttext of rerun
|
||||
{reruns[date]} date of rerun in dd:mm
|
||||
{reruns[day]} short dayname of rerun
|
||||
{reruns[start]} start time of rerun in hh:mm
|
||||
{reruns[stop]} stop time of rerun in hh:mm
|
||||
{reruns[channelname]} name of channel on which rerun occurs
|
||||
{reruns[channelnumber]} number of channel on which rerun occurs
|
||||
{reruns[channelid]} id of channel on which rerun occurs to display channel logo
|
||||
{reruns[channellogoexists]} true if channel logo exists
|
||||
{epgpic1avaialble} true if first epg picture is available
|
||||
{epgpic2avaialble} true if first epg picture is available
|
||||
{epgpic3avaialble} true if first epg picture is available
|
||||
{epgpic1path} path of first epg picture
|
||||
{epgpic2path} path of second epg picture
|
||||
{epgpic3path} path of third epg picture
|
||||
|
||||
{ismovie} true if event is scraped as a movie
|
||||
Available variables for movies:
|
||||
{movietitle} movie title from themoviedb
|
||||
{movieoriginalTitle} movie original title from themoviedb
|
||||
{movietagline} movie tagline from themoviedb
|
||||
{movieoverview} movie overview from themoviedb
|
||||
{movieadult} true if movie is rated as adult
|
||||
{moviebudget} movie budget from themoviedb in $
|
||||
{movierevenue} movie revenue from themoviedb in $
|
||||
{moviegenres} movie genres from themoviedb
|
||||
{moviehomepage} movie homepage from themoviedb
|
||||
{moviereleasedate} movie release date from themoviedb
|
||||
{movieruntime} movie runtime from themoviedb
|
||||
{moviepopularity} movie popularity from themoviedb
|
||||
{movievoteaverage} movie vote average from themoviedb
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{fanartwidth} width of scraped fanart
|
||||
{fanartheight} height of scraped fanart
|
||||
{fanartpath} absolute path of scraped fanart
|
||||
{movieiscollection} true if movie is part of a collection
|
||||
{moviecollectionName} name of movie collection
|
||||
{collectionposterwidth} width of scraped collection poster
|
||||
{collectionposterheight} height of scraped collection poster
|
||||
{collectionposterpath} absolute path of scraped collection poster
|
||||
{collectionfanartwidth} width of scraped collection fanart
|
||||
{collectionfanartheight} height of scraped collection fanart
|
||||
{collectionfanartpath} absolute path of scraped collection fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
|
||||
{isseries} true if event is scraped as a series
|
||||
Available variables for series:
|
||||
{seriesname} name of series
|
||||
{seriesoverview} series overview
|
||||
{seriesfirstaired} first aired date
|
||||
{seriesnetwork} network which produces series
|
||||
{seriesgenre} series genre
|
||||
{seriesrating} series thetvdb rating
|
||||
{seriesstatus} status of series (running / finished)
|
||||
{episodetitle} title of episode
|
||||
{episodenumber} number of episode
|
||||
{episodeseason} season of episode
|
||||
{episodefirstaired} first aired date of episode
|
||||
{episodegueststars} guest stars of episode
|
||||
{episodeoverview} episode overview
|
||||
{episoderating} user rating for episode
|
||||
{episodeimagewidth} episode image width
|
||||
{episodeimageheight} episode image height
|
||||
{episodeimagepath} episode image path
|
||||
{seasonposterwidth} episode season poster width
|
||||
{seasonposterheight} episode season poster height
|
||||
{seasonposterpath} episode season poster path
|
||||
{seriesposter1width} width of 1st poster
|
||||
{seriesposter1height} height of 1st poster
|
||||
{seriesposter1path} path of 1st poster
|
||||
{seriesposter2width} width of 2nd poster
|
||||
{seriesposter2height} height of 2nd poster
|
||||
{seriesposter2path} path of 2nd poster
|
||||
{seriesposter3width} width of 3rd poster
|
||||
{seriesposter3height} height of 3rd poster
|
||||
{seriesposter3path} path of 3rd poster
|
||||
{seriesfanart1width} width of 1st fanart
|
||||
{seriesfanart1height} height of 1st fanart
|
||||
{seriesfanart1path} path of 1st fanart
|
||||
{seriesfanart2width} width of 2nd fanart
|
||||
{seriesfanart2height} height of 2nd fanart
|
||||
{seriesfanart2path} path of 2nd fanart
|
||||
{seriesfanart3width} width of 3rd fanart
|
||||
{seriesfanart3height} height of 3rd fanart
|
||||
{seriesfanart3path} path of 3rd fanart
|
||||
{seriesbanner1width} width of 1st banner
|
||||
{seriesbanner1height} height of 1st banner
|
||||
{seriesbanner1path} path of 1st banner
|
||||
{seriesbanner2width} width of 2nd banner
|
||||
{seriesbanner2height} height of 2nd banner
|
||||
{seriesbanner2path} path of 2nd banner
|
||||
{seriesbanner3width} width of 3rd banner
|
||||
{seriesbanner3height} height of 3rd banner
|
||||
{seriesbanner3path} path of 3rd fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
-->
|
||||
|
||||
<!-- a tab is one scrolling area, just position and draw as inside a normal area -->
|
||||
|
||||
<!-- TAB EPGINFO -->
|
||||
<tab name="EPG Info" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
|
||||
@ -331,11 +145,6 @@
|
||||
<drawimage condition="{movieiscollection}" name="collectionposter" imagetype="image" path="{collectionposterpath}" align="center" y="{posy(collectionfanart)} + {height(collectionfanart)} + 20" width="{areawidth}*0.6" height="{areawidth} * 0.6 * {collectionposterheight} / {collectionposterwidth}"/>
|
||||
</tab>
|
||||
|
||||
<!-- Available Variables tablabels:
|
||||
{tabs[]} array with available tab labels
|
||||
{tabs[title]} title of tab
|
||||
{tabs[current]} true if tab is displayed currently
|
||||
-->
|
||||
<tablabels>
|
||||
<area x="0" y="85%" width="98%" height="5%" layer="3">
|
||||
<loop name="tabs" x="0" y="0" orientation="horizontal">
|
||||
@ -346,4 +155,4 @@
|
||||
</loop>
|
||||
</area>
|
||||
</tablabels>
|
||||
</menudetailedepg>
|
||||
</menudetailedepg>
|
||||
|
@ -21,28 +21,7 @@
|
||||
<fill color="{clrTransparent}" />
|
||||
</area>
|
||||
</datetime>
|
||||
<!-- Available Variables colorbuttons:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
|
||||
<colorbuttons>
|
||||
<area x="0" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -85,34 +64,7 @@
|
||||
<drawrectangle condition="{blue4}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
</colorbuttons>
|
||||
<!-- Available Variables in detailheader elements:
|
||||
{name} full name of recording (including folders)
|
||||
{epgname} Name of recording (Name from EPG)
|
||||
{shorttext} shorttext of recording
|
||||
{date} date of recording in dd.mm.yy
|
||||
{time} time of current recording in hh:mm
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{duration} real duration of recording in minutes
|
||||
{durationhours} real duration, full hours
|
||||
{durationminutes} real duration, rest of minutes
|
||||
{durationevent} duration of corresponding event in minutes
|
||||
{durationeventhours} event duration, full hours
|
||||
{durationeventminutes} event duration, rest of minutes
|
||||
{ismovie} true if event is scraped as a movie
|
||||
{isseries} true if event is scraped as a series
|
||||
{posteravailable} true if a poster is available
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{banneravailable} true if a banner is available
|
||||
{bannerwidth} width of banner
|
||||
{bannerheight} height of banner
|
||||
{bannerpath} path of banner
|
||||
{recimgavailable} true if a recording image is available in the recording path
|
||||
{recimgpath} path of rec image
|
||||
-->
|
||||
|
||||
<detailheader>
|
||||
<area x="1%" y="0" width="98%" height="20%" layer="3">
|
||||
<drawimage condition="{isseries}++{banneravailable}++not{recimgavailable}" imagetype="image" path="{bannerpath}" x="{areawidth} - {areawidth}/3 - 10" valign="center" width="{areawidth}/3" height="{areawidth}/3 * {bannerheight} / {bannerwidth}"/>
|
||||
@ -124,10 +76,7 @@
|
||||
<drawtext name="shorttext" x="20" y="{posy(title)} + {height(title)}" font="{light}" fontsize="25%" color="{clrWhite}" text="{shorttext}" />
|
||||
</area>
|
||||
</detailheader>
|
||||
<!-- Available Variables scrollbar:
|
||||
{height} height in one-tenth of a percent of total height
|
||||
{offset} offset from top in one-tenth of a percent of total height
|
||||
-->
|
||||
|
||||
<scrollbar>
|
||||
<area x="98%" y="20%" width="2%" height="65%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
@ -135,132 +84,7 @@
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
<!-- Available Variables in tab elements:
|
||||
{name} full name of recording (including folders)
|
||||
{epgname} Name of recording (Name from EPG)
|
||||
{shorttext} shorttext of recording
|
||||
{description} description of recording
|
||||
{date} date of recording in dd.mm.yy
|
||||
{time} time of recording in hh:mm
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{duration} real duration of recording in minutes
|
||||
{durationhours} real duration, full hours
|
||||
{durationminutes} real duration, rest of minutes
|
||||
{durationevent} duration of corresponding event in minutes
|
||||
{durationeventhours} event duration, full hours
|
||||
{durationeventminutes} event duration, rest of minutes
|
||||
|
||||
{recordingsize} size of recording (automatically in GB / MB)
|
||||
{recordingsizecutted} size of cutted recording (automatically in GB / MB)
|
||||
{recordinglength} length of recording (in hh::mm:ss)
|
||||
{recordinglengthcutted} length of cutted recording (in hh::mm:ss)
|
||||
{recordingbitrate} bitrate of recording (in MBit/s)
|
||||
{recordingformat} format of recording (TS / PS)
|
||||
{searchtimer} name of accordign searchtimer (if available)
|
||||
|
||||
{recimg1avaialble} true if first recording image is available
|
||||
{recimg2avaialble} true if first recording image is available
|
||||
{recimg3avaialble} true if first recording image is available
|
||||
{recimg1path} path of first recording image
|
||||
{recimg2path} path of second recording image
|
||||
{recimg3path} path of third recording image
|
||||
|
||||
{ismovie} true if event is scraped as a movie
|
||||
Available variables for movies:
|
||||
{movietitle} movie title from themoviedb
|
||||
{movieoriginalTitle} movie original title from themoviedb
|
||||
{movietagline} movie tagline from themoviedb
|
||||
{movieoverview} movie overview from themoviedb
|
||||
{movieadult} true if movie is rated as adult
|
||||
{moviebudget} movie budget from themoviedb in $
|
||||
{movierevenue} movie revenue from themoviedb in $
|
||||
{moviegenres} movie genres from themoviedb
|
||||
{moviehomepage} movie homepage from themoviedb
|
||||
{moviereleasedate} movie release date from themoviedb
|
||||
{movieruntime} movie runtime from themoviedb
|
||||
{moviepopularity} movie popularity from themoviedb
|
||||
{movievoteaverage} movie vote average from themoviedb
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{fanartwidth} width of scraped fanart
|
||||
{fanartheight} height of scraped fanart
|
||||
{fanartpath} absolute path of scraped fanart
|
||||
{movieiscollection} true if movie is part of a collection
|
||||
{moviecollectionName} name of movie collection
|
||||
{collectionposterwidth} width of scraped collection poster
|
||||
{collectionposterheight} height of scraped collection poster
|
||||
{collectionposterpath} absolute path of scraped collection poster
|
||||
{collectionfanartwidth} width of scraped collection fanart
|
||||
{collectionfanartheight} height of scraped collection fanart
|
||||
{collectionfanartpath} absolute path of scraped collection fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
|
||||
{isseries} true if event is scraped as a series
|
||||
Available variables for series:
|
||||
{seriesname} name of series
|
||||
{seriesoverview} series overview
|
||||
{seriesfirstaired} first aired date
|
||||
{seriesnetwork} network which produces series
|
||||
{seriesgenre} series genre
|
||||
{seriesrating} series thetvdb rating
|
||||
{seriesstatus} status of series (running / finished)
|
||||
{episodetitle} title of episode
|
||||
{episodenumber} number of episode
|
||||
{episodeseason} season of episode
|
||||
{episodefirstaired} first aired date of episode
|
||||
{episodegueststars} guest stars of episode
|
||||
{episodeoverview} episode overview
|
||||
{episoderating} user rating for episode
|
||||
{episodeimagewidth} episode image width
|
||||
{episodeimageheight} episode image height
|
||||
{episodeimagepath} episode image path
|
||||
{seasonposterwidth} episode season poster width
|
||||
{seasonposterheight} episode season poster height
|
||||
{seasonposterpath} episode season poster path
|
||||
{seriesposter1width} width of 1st poster
|
||||
{seriesposter1height} height of 1st poster
|
||||
{seriesposter1path} path of 1st poster
|
||||
{seriesposter2width} width of 2nd poster
|
||||
{seriesposter2height} height of 2nd poster
|
||||
{seriesposter2path} path of 2nd poster
|
||||
{seriesposter3width} width of 3rd poster
|
||||
{seriesposter3height} height of 3rd poster
|
||||
{seriesposter3path} path of 3rd poster
|
||||
{seriesfanart1width} width of 1st fanart
|
||||
{seriesfanart1height} height of 1st fanart
|
||||
{seriesfanart1path} path of 1st fanart
|
||||
{seriesfanart2width} width of 2nd fanart
|
||||
{seriesfanart2height} height of 2nd fanart
|
||||
{seriesfanart2path} path of 2nd fanart
|
||||
{seriesfanart3width} width of 3rd fanart
|
||||
{seriesfanart3height} height of 3rd fanart
|
||||
{seriesfanart3path} path of 3rd fanart
|
||||
{seriesbanner1width} width of 1st banner
|
||||
{seriesbanner1height} height of 1st banner
|
||||
{seriesbanner1path} path of 1st banner
|
||||
{seriesbanner2width} width of 2nd banner
|
||||
{seriesbanner2height} height of 2nd banner
|
||||
{seriesbanner2path} path of 2nd banner
|
||||
{seriesbanner3width} width of 3rd banner
|
||||
{seriesbanner3height} height of 3rd banner
|
||||
{seriesbanner3path} path of 3rd fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
-->
|
||||
|
||||
<!-- a tab is one scrolling area, just position and draw as inside a normal area -->
|
||||
<tab name="Info" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
|
||||
<drawtextbox condition="not{isseries}++not{ismovie}" x="0" y="0" width="96%" font="{light}" fontsize="8%" color="{clrWhite}" text="{description}" />
|
||||
<drawimage condition="{isseries}" name="seriesposter" imagetype="image" path="{seriesposter1path}" x="{areawidth}*0.7" y="0" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {seriesposter1height} / {seriesposter1width}"/>
|
||||
@ -308,11 +132,6 @@
|
||||
<drawimage condition="{movieiscollection}" name="collectionposter" imagetype="image" path="{collectionposterpath}" align="center" y="{posy(collectionfanart)} + {height(collectionfanart)} + 20" width="{areawidth}*0.6" height="{areawidth} * 0.6 * {collectionposterheight} / {collectionposterwidth}"/>
|
||||
</tab>
|
||||
|
||||
<!-- Available Variables tablabels:
|
||||
{tabs[]} array with available tab labels
|
||||
{tabs[title]} title of tab
|
||||
{tabs[current]} true if tab is displayed currently
|
||||
-->
|
||||
<tablabels>
|
||||
<area x="0" y="85%" width="98%" height="5%" layer="3">
|
||||
<loop name="tabs" x="0" y="0" orientation="horizontal">
|
||||
|
@ -18,28 +18,7 @@
|
||||
<drawtext align="center" valign="center" font="{light}" fontsize="60%" color="{clrWhite}" text="{time}" />
|
||||
</area>
|
||||
</datetime>
|
||||
<!-- Available Variables colorbuttons:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
|
||||
<colorbuttons>
|
||||
<area x="0" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -90,10 +69,7 @@
|
||||
</area>
|
||||
</scrollbar>
|
||||
|
||||
<!-- Available Variables in tab elements:
|
||||
{text} detailed text
|
||||
-->
|
||||
<tab name="text" x="2%" y="10%" width="94%" height="80%" layer="2" scrollheight="{areaheight}/4">
|
||||
<drawtextbox x="0" y="0" width="96%" font="{light}" fontsize="5%" color="{clrWhite}" text="{text}" />
|
||||
</tab>
|
||||
</menudetailedtext>
|
||||
</menudetailedtext>
|
||||
|
@ -1,7 +1,4 @@
|
||||
<menumain x="0" y="0" width="100%" height="100%" fadetime="0">
|
||||
<!--
|
||||
static content of main menu, is only drawn once at main menu startup
|
||||
-->
|
||||
<background>
|
||||
<!-- main menu background -->
|
||||
<area x="0" y="0" width="71%" height="70%" layer="1">
|
||||
@ -13,26 +10,13 @@
|
||||
<drawrectangle x="53%" y="0" width="47%" height="100%" color="{clrTransBlack}" />
|
||||
</area>
|
||||
</background>
|
||||
<!-- Available Variables header:
|
||||
{title} title of current menu
|
||||
{vdrversion} running VDR Version
|
||||
-->
|
||||
|
||||
<header>
|
||||
<area x="0" y="0" width="70%" height="7%" layer="2">
|
||||
<drawtext x="10" valign="center" font="{light}" fontsize="100%" color="{clrWhite}" text="{title} {vdrversion}" />
|
||||
</area>
|
||||
</header>
|
||||
<!-- Available Variables datetime:
|
||||
{time} time in hh:mm
|
||||
{day} day in digits
|
||||
{dayleadingzero} day in digits with leading 0
|
||||
{dayname} Full name of the day
|
||||
{daynameshort} Short 3 char name of the day
|
||||
{month} month in digits with leading 0
|
||||
{monthname} Full name of the month
|
||||
{monthnameshort} 3 letter abbrivation of month name
|
||||
{year} year in yyyy
|
||||
-->
|
||||
|
||||
<datetime>
|
||||
<area x="75%" y="0" width="13%" height="10%" layer="3">
|
||||
<drawtext align="right" y="0%" font="{light}" fontsize="55%" color="{clrWhite}" text="{dayname}" />
|
||||
@ -43,28 +27,6 @@
|
||||
</area>
|
||||
</datetime>
|
||||
|
||||
<!-- Available Variables colorbuttons:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
<colorbuttons>
|
||||
<area x="0" y="63%" width="18%" height="7%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -107,20 +69,7 @@
|
||||
<drawrectangle condition="{blue4}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
</colorbuttons>
|
||||
<!-- Available Variables timers:
|
||||
{numtimers} number of active timers (max. 15 timers will be displayed)
|
||||
{numtimerconflicts} number of current timer conflicts
|
||||
|
||||
{timers[]} array with active timers (local and remote if remotetimers plugin is in use)
|
||||
{timers[title]} title of timer
|
||||
{timers[datetime]} date and time of timer
|
||||
{timers[recording]} true if timer is recording currently
|
||||
{timers[channelname]} name of channel for which timer is created
|
||||
{timers[channelnumber]} number of channel
|
||||
{timers[channelid]} ChannelID of channel
|
||||
{timers[channellogoexists]} true if channel logo exists
|
||||
{timers[isremotetimer]} true if timer is a remote timer from remotetimers plugin
|
||||
-->
|
||||
<timers detached="true" delay="100" shifttime="{shifttimetimers}" startx="0" starty="100%">
|
||||
<area x="0" y="75%" width="{areawidth}/8 - 5" height="25%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
@ -167,14 +116,6 @@
|
||||
</area>
|
||||
</timers>
|
||||
|
||||
<!-- Available Variables discusage:
|
||||
{freetime} available disc capacity in hh:mm
|
||||
{freepercent} available disc capacity in percent
|
||||
{usedpercent} used disc capacity in percent
|
||||
{freegb} available disc capacity in gigabytes
|
||||
{discalert} true if disc usage is > 95%
|
||||
{vdrusagestring} localized VDR internal usage string
|
||||
-->
|
||||
<discusage detached="true" delay="100" fadetime="0">
|
||||
<area background="true" x="75%" y="26%" width="25%" height="10%" layer="1">
|
||||
<fill condition="not{discalert}" color="{clrTransBlack}"/>
|
||||
@ -187,26 +128,6 @@
|
||||
</area>
|
||||
</discusage>
|
||||
|
||||
<!-- Available Variables currentweather:
|
||||
{timestamp} timestamp of forecast in dd.mm hh:mm
|
||||
{temperature} current temperature in °C
|
||||
{apparenttemperature} apparent (feeled) temperature
|
||||
{mintemperature} minimum daily temperature in °C
|
||||
{maxtemperature} maximum daily temperature in °C
|
||||
{summary} short weather summary
|
||||
{icon} weather icon
|
||||
{precipitationintensity} precipitation intensity in l/m2
|
||||
{precipitationprobability} precipitation probability in %
|
||||
{precipitationtype} precipitation type
|
||||
{humidity} humidity in %
|
||||
{windspeed} windspeed in km/h
|
||||
{windbearing} wind bearing in °
|
||||
{windbearingstring} wind bearing (N, NE, ...)
|
||||
{visibility} visibility in km
|
||||
{cloudcover} cloud cover in %
|
||||
{pressure} pressure in HPo
|
||||
{ozone} ozone value in DU
|
||||
-->
|
||||
<currentweather detached="true" delay="100" fadetime="0">
|
||||
<area x="75%" y="13%" width="25%" height="10%" layer="2">
|
||||
<drawrectangle x="0" y="0" width="53%" height="100%" color="{clrTransBlueLight}" />
|
||||
@ -224,23 +145,6 @@
|
||||
</area>
|
||||
</currentweather>
|
||||
|
||||
<!-- Available Variables devices:
|
||||
{numdevices} number of available devices
|
||||
{devices[]} array with available devices
|
||||
{devices[num]} number of current device
|
||||
{devices[type]} type of device (DVB-S, DVB-C, ...)
|
||||
{devices[istuned]} true if device is currently tuned to a transponder
|
||||
{devices[livetv]} true if device is currently playing livetv
|
||||
{devices[recording]} true if device is currently recording
|
||||
{devices[hascam]} true if device has a CAM
|
||||
{devices[cam]} number of CAM
|
||||
{devices[signalstrength]} signalstrength of devcie
|
||||
{devices[signalquality]} signalstrength of devcie
|
||||
{devices[channelnumber]} number of the currently tuned channel
|
||||
{devices[channelname]} name of the currently tuned channel
|
||||
{devices[channelid]} ID of the currently tuned channel
|
||||
{devices[source]} source of the currently tuned channel
|
||||
-->
|
||||
<devices condition="{showdevices}" detached="true" delay="100" fadetime="0">
|
||||
<area background="true" x="75%" y="48%" width="25%" height="{areaheight}/12 * {numdevices}" layer="1">
|
||||
<fill color="{clrTransBlack}"/>
|
||||
@ -259,9 +163,6 @@
|
||||
</area>
|
||||
</devices>
|
||||
|
||||
<!-- Available Variables systemload:
|
||||
{load} current system load
|
||||
-->
|
||||
<systemload detached="true" delay="100" fadetime="0">
|
||||
<area background="true" x="75%" y="40%" width="25%" height="5%" layer="1">
|
||||
<fill color="{clrTransBlack}"/>
|
||||
@ -271,23 +172,10 @@
|
||||
</area>
|
||||
</systemload>
|
||||
|
||||
<!-- Available Variables customtokens:
|
||||
all custom tokens set by the svdrp command SCTK are available in this viewelement
|
||||
For instance, use an appropriate script which runs periodically as cronjob and
|
||||
sets these custom tokens with svdrpsend or dbus2vdr
|
||||
-->
|
||||
<customtokens>
|
||||
</customtokens>
|
||||
|
||||
<menuitems x="0" y="7%" orientation="vertical" width="70%" height="56%" align="center" numlistelements="8">
|
||||
<!-- Available Variables main menu listelement:
|
||||
{nummenuitem} number of item in list, starts with 1
|
||||
{label} label of menu item
|
||||
{number} number of menu item (or empty string if not set)
|
||||
{icon} path of appropriate icon
|
||||
{current} true if item is currently selected
|
||||
{separator} true if item is a list separator
|
||||
-->
|
||||
<menuitems condition="strequal({mainmenuorientation}, 'vertical')" x="0" y="7%" orientation="vertical" width="70%" height="56%" align="center" numlistelements="8">
|
||||
<listelement>
|
||||
<area x="0" width="60%" layer="2">
|
||||
<fill condition="not{current}" color="{clrTransparent}" />
|
||||
@ -297,12 +185,6 @@
|
||||
<drawtext name="menutext" x="20" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{number} {label}" />
|
||||
</areascroll>
|
||||
</listelement>
|
||||
<!-- additional element which is drawn for current element -->
|
||||
<!-- Available Variables main menu currentelement:
|
||||
{label} label of menu item
|
||||
{number} number of menu item (or empty string if not set)
|
||||
{icon} path of appropriate icon
|
||||
-->
|
||||
<currentelement delay="50" fadetime="0">
|
||||
<area x="61%" y="22%" width="36%" height="52%" layer="2">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
@ -312,8 +194,30 @@
|
||||
</area>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
|
||||
<scrollbar>
|
||||
|
||||
<menuitems condition="strequal({mainmenuorientation}, 'horizontal')" x="0" y="7%" orientation="horizontal" width="70%" height="56%" align="center" numlistelements="1">
|
||||
<listelement>
|
||||
<area y="10%" height="80%" layer="2">
|
||||
<drawrectangle condition="{current}" x="20%" y="0" width="60%" height="100%" color="{clrTransBlueLight}" />
|
||||
</area>
|
||||
<area y="10%" height="80%" layer="3">
|
||||
<drawimage condition="{current}" imagetype="menuicon" path="{icon}" align="center" y="10%" width="{areaheight}*0.6" height="{areaheight}*0.6"/>
|
||||
</area>
|
||||
<areascroll scrollelement="menutext" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" y="70%" height="20%" layer="4">
|
||||
<drawtext name="menutext" align="center" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{label}" />
|
||||
</areascroll>
|
||||
</listelement>
|
||||
</menuitems>
|
||||
|
||||
<scrollbar condition="strequal({mainmenuorientation}, 'horizontal')">
|
||||
<area condition="{hasprev}" x="0" y="7%" width="14%" height="56%" layer="2">
|
||||
<drawimage imagetype="icon" path="ico_arrow_left" align="center" valign="center" width="{areawidth}*0.8" height="{areawidth}*0.8"/>
|
||||
</area>
|
||||
<area condition="{hasnext}" x="56%" y="7%" width="14%" height="56%" layer="2">
|
||||
<drawimage imagetype="icon" path="ico_arrow_right" align="center" valign="center" width="{areawidth}*0.8" height="{areawidth}*0.8"/>
|
||||
</area>
|
||||
</scrollbar>
|
||||
<scrollbar condition="strequal({mainmenuorientation}, 'vertical')">
|
||||
<area x="68%" y="7%" width="2%" height="56%" layer="2">
|
||||
<fill color="{clrWhite}" />
|
||||
<drawrectangle x="2" y="2" width="{areawidth} - 4" height="{areaheight} - 4" color="{clrTransparent}" />
|
||||
|
@ -1,39 +1,49 @@
|
||||
<menurecordings x="0" y="0" width="100%" height="100%" fadetime="0">
|
||||
<menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="16">
|
||||
<!-- Available Variables recordings menu listelement:
|
||||
{nummenuitem} number of item in list, starts with 1
|
||||
{name} Name of recording
|
||||
{epgname} Name of recording (Name from EPG)
|
||||
{shorttext} Short Text of recording
|
||||
{description} Descrption of recording
|
||||
{date} Date of recording (day dd.mm.yyyy)
|
||||
{time} Time of recording
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{duration} real duration of recording in minutes
|
||||
{durationhours} real duration, full hours
|
||||
{durationminutes} real duration, rest of minutes
|
||||
{durationevent} duration of corresponding event in minutes
|
||||
{durationeventhours} event duration, full hours
|
||||
{durationeventminutes} event duration, rest of minutes
|
||||
{current} true if item is currently selected
|
||||
{new} true if recording is new
|
||||
{percentseen} percent already watched, -1 for VDR < 2.1.8
|
||||
{watched} true if percentseen > 85% including MarginStop of not cutted recording
|
||||
{cutted} true if recording is cutted
|
||||
{folder} true if item is a folder
|
||||
{numrecordingsfolder} if item is a folder, number of recordings in this folder
|
||||
{newrecordingsfolder} if item is a folder, number of new recordings in this folder
|
||||
{hasposterthumbnail} true if a scraped poster thumbnail is available for recording
|
||||
{thumbnailbwidth} width of scraped poster thumbnail
|
||||
{thumbnailheight} height of scraped poster thumbnail
|
||||
{thumbnailpath} absolute path of scraped poster thumbnail
|
||||
{hasposter} true if a scraped poster is available for recording
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
-->
|
||||
|
||||
<background condition="strequal({recmenuorientation}, 'horizontal')">
|
||||
<!-- horizontal menu -->
|
||||
<area x="0" y="0" width="100%" height="10%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
</area>
|
||||
<area x="0" y="60%" width="100%" height="40%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
</area>
|
||||
<area x="5%" y="10%" width="90%" height="50%" layer="1">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
</area>
|
||||
</background>
|
||||
|
||||
<header condition="strequal({recmenuorientation}, 'horizontal')">
|
||||
<!-- horizontal menu -->
|
||||
<area x="0" y="0" width="70%" height="10%" layer="2">
|
||||
<drawtext condition="not{hasicon}" x="5" width="{areawidth}-10" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
<drawimage condition="{hasicon}" name="menuicon" imagetype="menuicon" path="{icon}" x="5" valign="center" width="{areaheight}*8/10" height="80%"/>
|
||||
<drawtext condition="{hasicon}" x="{areaheight}" valign="center" width="{areawidth}-{areaheight}-10" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
</area>
|
||||
</header>
|
||||
|
||||
<datetime condition="strequal({recmenuorientation}, 'horizontal')">
|
||||
<!-- horizontal menu -->
|
||||
<area x="70%" y="0" width="15%" height="10%" layer="2">
|
||||
<drawtext align="right" y="5%" font="{light}" fontsize="50%" color="{clrWhite}" text="{dayname}" />
|
||||
<drawtext align="right" y="45%" font="{light}" fontsize="50%" color="{clrWhite}" text="{day}. {monthnameshort}" />
|
||||
</area>
|
||||
<area x="85%" y="0" width="15%" height="10%" layer="2">
|
||||
<drawtext align="center" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{time}" />
|
||||
</area>
|
||||
</datetime>
|
||||
|
||||
<sortmode condition="strequal({recmenuorientation}, 'horizontal')">
|
||||
<!-- horizontal menu -->
|
||||
<area x="60%" y="2%" width="6%" height="6%" layer="4">
|
||||
<drawimage condition="{sortnumber}" imagetype="icon" path="ico_sort_number" x="0" y="0" width="100%" height="100%"/>
|
||||
<drawimage condition="{sortname}" imagetype="icon" path="ico_sort_name" x="0" y="0" width="100%" height="100%"/>
|
||||
<drawimage condition="{sorttime}" imagetype="icon" path="ico_sort_time" x="0" y="0" width="100%" height="100%"/>
|
||||
<drawimage condition="{sortprovider}" imagetype="icon" path="ico_sort_provider" x="0" y="0" width="100%" height="100%"/>
|
||||
</area>
|
||||
</sortmode>
|
||||
|
||||
<menuitems condition="strequal({recmenuorientation}, 'vertical')" x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="16">
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area x="1%" width="58%" layer="2">
|
||||
@ -55,33 +65,6 @@
|
||||
<drawimage condition="not{new}++{cutted}" imagetype="icon" path="ico_cutted" x="{areawidth} - {areaheight}" width="0.9*{areaheight}" height="0.9*{areaheight}" valign="center" />
|
||||
</area>
|
||||
</listelement>
|
||||
<!-- additional element which is drawn for current element -->
|
||||
<!-- Available Variables channels menu currentelement:
|
||||
{name} Real Name of recording (Name of Recording Folder)
|
||||
{epgname} Name of recording (Name from EPG)
|
||||
{shorttext} Short Text of recording
|
||||
{description} Descrption of recording
|
||||
{date} Date of recording
|
||||
{time} Time of recording
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{duration} real duration of recording in minutes
|
||||
{durationhours} real duration, full hours
|
||||
{durationminutes} real duration, rest of minutes
|
||||
{durationevent} duration of corresponding event in minutes
|
||||
{durationeventhours} event duration, full hours
|
||||
{durationeventminutes} event duration, rest of minutes
|
||||
{new} true if recording is new
|
||||
{cutted} true if recording is cutted
|
||||
{folder} true if item is a folder
|
||||
{numrecordingsfolder} if item is a folder, number of recordings in this folder
|
||||
{newrecordingsfolder} if item is a folder, number of new recordings in this folder
|
||||
{hasposter} true if a scraped poster is available for recording
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
-->
|
||||
<currentelement delay="500" fadetime="0">
|
||||
<area x="63%" y="0" width="36%" height="100%" layer="2">
|
||||
<!-- header -->
|
||||
@ -96,15 +79,104 @@
|
||||
</area>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
<!-- Available Variables colorbuttons:
|
||||
{height} height in one-tenth of a percent of total height
|
||||
{offset} offset from top in one-tenth of a percent of total height
|
||||
-->
|
||||
<scrollbar>
|
||||
|
||||
<menuitems condition="strequal({recmenuorientation}, 'horizontal')" x="0" y="10%" orientation="horizontal" width="100%" height="82%" align="center" numlistelements="10">
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area y="64%" height="36%" layer="2">
|
||||
<fill condition="not{current}" color="{clrTransparent}" />
|
||||
<fill condition="{current}" color="{clrTransBlueLight}" />
|
||||
<fill condition="{separator}" color="{clrSemiTransBlack}" />
|
||||
</area>
|
||||
<!-- recording folder -->
|
||||
<area condition="{folder}" y="64%" height="36%" layer="3">
|
||||
<drawimage name="foldericon" imagetype="icon" path="ico_recfolder" align="center" y="0" width="0.6*{areaheight} * 92 / 136" height="0.6*{areaheight}" />
|
||||
<drawtextbox align="center" valign="center" maxlines="3" x="1%" y="63%" width="98%" height="37%" font="{light}" fontsize="12%" color="{clrWhite}" text="{name} ({numrecordingsfolder}, {newrecordingsfolder} new)" />
|
||||
</area>
|
||||
<!-- recording item -->
|
||||
<area condition="not{folder}" y="64%" height="36%" layer="3">
|
||||
<drawimage condition="{hasposterthumbnail}" imagetype="image" path="{thumbnailpath}" align="center" y="8" width="{areaheight}*0.6 * {thumbnailbwidth} / {thumbnailheight}" height="{areaheight}*0.6"/>
|
||||
<drawimage condition="not{hasposterthumbnail}" imagetype="icon" path="ico_recording" align="center" y="8" width="{areaheight}*0.5 * {thumbnailbwidth} / {thumbnailheight}" height="{areaheight}*0.6"/>
|
||||
<drawtextbox align="center" valign="center" maxlines="3" x="1%" y="63%" width="98%" height="37%" font="{light}" fontsize="12%" color="{clrWhite}" text="{name}" />
|
||||
</area>
|
||||
</listelement>
|
||||
<currentelement delay="500" fadetime="0">
|
||||
<area x="5%" y="0" width="90%" height="61%" layer="2">
|
||||
<!-- scraper poster -->
|
||||
<drawimage condition="{hasposter}" name="poster" imagetype="image" path="{posterpath}" x="1%" y="2%" width="{areaheight}*0.96 * {posterwidth} / {posterheight}" height="96%"/>
|
||||
<!-- header -->
|
||||
<drawtext condition="{hasposter}" name="title" x="{width(poster)} + 0.04*{areawidth}" y="0" font="{semibold}" fontsize="10%" color="{clrWhite}" text="{epgname}" />
|
||||
<drawtext condition="{hasposter}" name="shorttext" x="{width(poster)} + 0.04*{areawidth}" y="{height(title)}" width="0.96*{areawidth} - {width(poster)}" font="{semibold}" fontsize="8%" color="{clrWhite}" text="{shorttext}" />
|
||||
<drawtext condition="{hasposter}" name="datetime" x="{width(poster)} + 0.04*{areawidth}" y="{posy(shorttext)} + {height(shorttext)}" font="{light}" fontsize="7%" color="{clrWhite}" text="{date} {time}, {duration} min" />
|
||||
|
||||
<drawtext condition="not{hasposter}" name="title" x="2%" y="0" font="{semibold}" fontsize="10%" color="{clrWhite}" text="{epgname}" />
|
||||
<drawtext condition="not{hasposter}" name="shorttext" x="2%" y="{height(title)}" width="98%" font="{semibold}" fontsize="8%" color="{clrWhite}" text="{shorttext}" />
|
||||
<drawtext condition="not{hasposter}" name="datetime" x="2%" y="{posy(shorttext)} + {height(shorttext)}" font="{light}" fontsize="7%" color="{clrWhite}" text="{date} {time}, {duration} min" />
|
||||
<!-- description -->
|
||||
<drawtextbox condition="{hasposter}" x="{width(poster)} + 0.04*{areawidth}" y="{posy(datetime)} + {height(datetime)} + 10" width="{areawidth}*0.94 - {width(poster)}" height="{areaheight}*0.92 - {posy(datetime)}" font="{light}" fontsize="7%" color="{clrWhite}" text="{description}" />
|
||||
<drawtextbox condition="not{hasposter}" x="2%" y="{posy(datetime)} + {height(datetime)} + 10" width="{areawidth}*0.98" height="{areaheight}*0.92 - {posy(datetime)}" font="{light}" fontsize="7%" color="{clrWhite}" text="{description}" />
|
||||
</area>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
|
||||
<scrollbar condition="strequal({recmenuorientation}, 'vertical')">
|
||||
<area x="60%" y="10%" width="2%" height="82%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
<drawrectangle x="2" y="2" width="{areawidth} - 4" height="{areaheight} - 4" color="{clrTransparent}" />
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
</menurecordings>
|
||||
|
||||
<scrollbar condition="strequal({recmenuorientation}, 'horizontal')">
|
||||
<area x="0" y="{areaheight}*0.6" width="100%" height="{areaheight}*0.025" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
<drawrectangle x="2" y="2" width="{areawidth} - 4" height="{areaheight} - 4" color="{clrTransparent}" />
|
||||
<drawrectangle x="4 + {areawidth} * {offset} / 1000" y="4" width="{areawidth} * {height} / 1000 - 8" height="{areaheight} - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
|
||||
<colorbuttons condition="strequal({recmenuorientation}, 'horizontal')">
|
||||
<!-- horizontal menu -->
|
||||
<area x="0" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
<drawrectangle condition="{red1}" x="0" y="0" width="10" height="100%" color="{clrRed}" />
|
||||
<drawtext condition="{green1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{green}" />
|
||||
<drawrectangle condition="{green1}" x="0" y="0" width="10" height="100%" color="{clrGreen}" />
|
||||
<drawtext condition="{yellow1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{yellow}" />
|
||||
<drawrectangle condition="{yellow1}" x="0" y="0" width="10" height="100%" color="{clrYellow}" />
|
||||
<drawtext condition="{blue1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{blue}" />
|
||||
<drawrectangle condition="{blue1}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
<area x="25%" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red2}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
<drawrectangle condition="{red2}" x="0" y="0" width="10" height="100%" color="{clrRed}" />
|
||||
<drawtext condition="{green2}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{green}" />
|
||||
<drawrectangle condition="{green2}" x="0" y="0" width="10" height="100%" color="{clrGreen}" />
|
||||
<drawtext condition="{yellow2}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{yellow}" />
|
||||
<drawrectangle condition="{yellow2}" x="0" y="0" width="10" height="100%" color="{clrYellow}" />
|
||||
<drawtext condition="{blue2}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{blue}" />
|
||||
<drawrectangle condition="{blue2}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
<area x="50%" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red3}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
<drawrectangle condition="{red3}" x="0" y="0" width="10" height="100%" color="{clrRed}" />
|
||||
<drawtext condition="{green3}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{green}" />
|
||||
<drawrectangle condition="{green3}" x="0" y="0" width="10" height="100%" color="{clrGreen}" />
|
||||
<drawtext condition="{yellow3}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{yellow}" />
|
||||
<drawrectangle condition="{yellow3}" x="0" y="0" width="10" height="100%" color="{clrYellow}" />
|
||||
<drawtext condition="{blue3}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{blue}" />
|
||||
<drawrectangle condition="{blue3}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
<area x="75%" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red4}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
<drawrectangle condition="{red4}" x="0" y="0" width="10" height="100%" color="{clrRed}" />
|
||||
<drawtext condition="{green4}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{green}" />
|
||||
<drawrectangle condition="{green4}" x="0" y="0" width="10" height="100%" color="{clrGreen}" />
|
||||
<drawtext condition="{yellow4}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{yellow}" />
|
||||
<drawrectangle condition="{yellow4}" x="0" y="0" width="10" height="100%" color="{clrYellow}" />
|
||||
<drawtext condition="{blue4}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{blue}" />
|
||||
<drawrectangle condition="{blue4}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
</colorbuttons>
|
||||
|
||||
</menurecordings>
|
||||
|
@ -1,18 +1,4 @@
|
||||
<menuschedules x="0" y="0" width="100%" height="100%" fadetime="0">
|
||||
<!-- Available Variables header:
|
||||
{title} title of current menu
|
||||
{vdrversion} running VDR Version
|
||||
{hasicon} true if a menu icon is available
|
||||
{icon} path of menu icon
|
||||
{channelnumber} Number of Channel of current event
|
||||
{channelname} Name of current Channel of current event
|
||||
{channellogoexists} true if a channel logo exists
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{whatson} true if menu "What's on" is displayed
|
||||
{whatsonnow} true if menu "What's on now" is displayed
|
||||
{whatsonnext} true if menu "What's on next" is displayed
|
||||
{whatsonfavorites} true if EPGSearch Favorites menu is displayed
|
||||
-->
|
||||
<header>
|
||||
<area x="0" y="0" width="38%" height="10%" layer="2">
|
||||
<drawimage condition="{whatsonnow}||{whatsonnext}||{whatsonfavorites}" name="menuicon" imagetype="menuicon" path="{icon}" x="5" valign="center" width="{areaheight}*8/10" height="80%"/>
|
||||
@ -23,36 +9,6 @@
|
||||
</header>
|
||||
|
||||
<menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="16">
|
||||
<!-- Available Variables schedules menu listelement:
|
||||
{nummenuitem} number of item in list, starts with 1
|
||||
{title} title of event
|
||||
{shorttext} shorttext of event
|
||||
{start} event start time in hh::mm
|
||||
{stop} event stop time
|
||||
{day} day of current event as three letter abrivation
|
||||
{date} date of current event in dd.mm.yy
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{running} true if event is currently running
|
||||
{elapsed} elapsed time of event, if not running 0
|
||||
{duration} duration of event
|
||||
{durationhours} duration, full hours
|
||||
{durationminutes} duration, rest of minutes
|
||||
{current} true if item is currently selected
|
||||
{separator} true if item is a list separator
|
||||
{channelname} Channel Name
|
||||
{channelnumber} Channel Number
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{channellogoexists} true if a channel logo exists
|
||||
{whatson} true if menu "What's on" is displayed
|
||||
{whatsonnow} true if menu "What's on now" is displayed
|
||||
{whatsonnext} true if menu "What's on next" is displayed
|
||||
{whatsonfavorites} true if EPGSearch Favorites menu is displayed
|
||||
{timerpartitial} true if partitial timer is set for the event
|
||||
{timerfull} true if full timer is set for the event
|
||||
{hasVPS} true if event has VPS information
|
||||
-->
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area x="1%" width="58%" layer="2">
|
||||
@ -132,42 +88,6 @@
|
||||
<drawtext x="20" valign="center" font="{light}" fontsize="95%" color="{clrBlueLight}" text="{title}" />
|
||||
</area>
|
||||
</listelement>
|
||||
<!-- additional element which is drawn for current element -->
|
||||
<!-- Available Variables schedules menu currentelement:
|
||||
{title} title of event
|
||||
{shorttext} shorttext of event
|
||||
{description} detailed description of event
|
||||
{start} event start time in hh::mm
|
||||
{stop} event stop time
|
||||
{day} day of current event
|
||||
{date} date of current event in dd.mm.yy
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{running} true if event is currently running
|
||||
{elapsed} elapsed time of event, if not running 0
|
||||
{duration} duration of event
|
||||
{durationhours} duration, full hours
|
||||
{durationminutes} duration, rest of minutes
|
||||
{channelname} Channel Name
|
||||
{channelnumber} Channel Number
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{channellogoexists} true if a channel logo exists
|
||||
{hasposter} true if a scraped poster is available for this element
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{timerpartitial} true if partitial timer is set for the event
|
||||
{timerfull} true if full timer is set for the event
|
||||
{whatson} true if menu "What's on" is displayed
|
||||
{whatsonnow} true if menu "What's on now" is displayed
|
||||
{whatsonnext} true if menu "What's on next" is displayed
|
||||
{schedule[]} array with next 10 schedules, only for whatsonnow and whatsonnext
|
||||
{schedule[title]} title of event
|
||||
{schedule[shorttext]} shorttext of event
|
||||
{schedule[start]} start time of event in hh:mm
|
||||
{schedule[stop]} stop time of event in hh:mm
|
||||
-->
|
||||
<currentelement delay="500" fadetime="0">
|
||||
<area condition="{whatson}" x="63%" y="0" width="36%" height="100%" layer="2">
|
||||
<!-- title -->
|
||||
@ -211,10 +131,7 @@
|
||||
</areacontainer>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
<!-- Available Variables scrollbar:
|
||||
{height} height in one-tenth of a percent of total height
|
||||
{offset} offset from top in one-tenth of a percent of total height
|
||||
-->
|
||||
|
||||
<scrollbar>
|
||||
<area x="60%" y="10%" width="2%" height="82%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
@ -222,4 +139,4 @@
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
</menuschedules>
|
||||
</menuschedules>
|
||||
|
@ -1,7 +1,4 @@
|
||||
<menusetup x="0" y="0" width="100%" height="100%" fadetime="0">
|
||||
<!--
|
||||
static content of main menu, is only drawn once at main menu startup
|
||||
-->
|
||||
<background>
|
||||
<area x="0" y="0" width="100%" height="100%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
@ -10,27 +7,14 @@
|
||||
<drawrectangle x="0" y="0" width="52%" height="100%" color="{clrTransBlueLight}" />
|
||||
</area>
|
||||
</background>
|
||||
<!-- Available Variables header:
|
||||
{title} title of current menu
|
||||
{vdrversion} running VDR Version
|
||||
{icon} icon path
|
||||
-->
|
||||
|
||||
<header>
|
||||
<area x="0" y="0" width="70%" height="7%" layer="2">
|
||||
<drawimage name="menuicon" imagetype="menuicon" path="{icon}" x="5" valign="center" width="{areaheight}*8/10" height="80%"/>
|
||||
<drawtext x="{areaheight}" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
</area>
|
||||
</header>
|
||||
<!-- Available Variables datetime:
|
||||
{time} time in hh:mm
|
||||
{day} day in digits
|
||||
{dayleadingzero} day in digits with leading 0
|
||||
{dayname} Full name of the day
|
||||
{daynameshort} Short 3 char name of the day
|
||||
{month} month in digits with leading 0
|
||||
{monthname} Full name of the month
|
||||
{year} year in yyyy
|
||||
-->
|
||||
|
||||
<datetime>
|
||||
<area x="84%" y="0" width="8%" height="7%" layer="3">
|
||||
<drawtext align="right" y="0%" font="{light}" fontsize="55%" color="{clrWhite}" text="{dayname}" />
|
||||
@ -41,12 +25,6 @@
|
||||
</area>
|
||||
</datetime>
|
||||
|
||||
<!-- Available Variables colorbuttons:
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
<colorbuttons>
|
||||
<area x="0" y="93%" width="25%" height="7%" layer="2">
|
||||
<drawtext x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -67,14 +45,6 @@
|
||||
</colorbuttons>
|
||||
|
||||
<menuitems x="0" y="7%" orientation="vertical" width="98%" height="86%" align="center" numlistelements="10">
|
||||
<!-- Available Variables setup menu listelement:
|
||||
{nummenuitem} number of item in list, starts with 1
|
||||
{label} label of menu item
|
||||
{number} number of menu item (or empty string if not set)
|
||||
{icon} path of appropriate icon
|
||||
{current} true if item is currently selected
|
||||
{separator} true if item is a list separator
|
||||
-->
|
||||
<listelement>
|
||||
<area x="0" width="60%" layer="2">
|
||||
<fill condition="not{current}" color="{clrTransparent}" />
|
||||
@ -84,12 +54,6 @@
|
||||
<drawtext name="menutext" x="20" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{number} {label}" />
|
||||
</areascroll>
|
||||
</listelement>
|
||||
<!-- additional element which is drawn for current element -->
|
||||
<!-- Available Variables main menu currentelement:
|
||||
{label} label of menu item
|
||||
{number} number of menu item (or empty string if not set)
|
||||
{icon} path of appropriate icon
|
||||
-->
|
||||
<currentelement delay="50" fadetime="0">
|
||||
<area x="61%" y="30%" width="37%" height="36%" layer="2">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
|
@ -1,28 +1,5 @@
|
||||
<menutimers x="0" y="0" width="100%" height="100%" fadetime="0">
|
||||
<menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="16">
|
||||
<!-- Available Variables channels menu listelement:
|
||||
{nummenuitem} number of item in list, starts with 1
|
||||
{title} Title of Timer
|
||||
{timerstart} Start Time of Timer in hh::mm
|
||||
{timerstop} End Time of Timer in hh::mm
|
||||
{day} Day (numerical)
|
||||
{dayname} Day, for repeating timers days where timer is active
|
||||
{month} Month (two digits)
|
||||
{monthname} Month, three letter abbrevation
|
||||
{year} Year (4 digits)
|
||||
{channelname} Name of channel which is set for the timer
|
||||
{channelid} ID of channel which is set for the timer (for dispalying channel logo)
|
||||
{channelnumber} Number of channel which is set for the timer
|
||||
{eventtitle} Title of corresponding event
|
||||
{eventstart} Start Time of corresponding event in hh::mm
|
||||
{eventstop} Stop Time of corresponding event in hh::mm
|
||||
{current} true if item is currently selected
|
||||
{flagactive} true if timer is active
|
||||
{flaginstant} true if timer is an instant timer
|
||||
{flagvps} true if timer uses VPS
|
||||
{flagrecording} true if is recording currently
|
||||
{flagpending} true if timer is pending
|
||||
-->
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area x="1%" width="58%" layer="2">
|
||||
@ -38,34 +15,6 @@
|
||||
<drawtext name="timertext" x="10" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{dayname} {day}. {timerstart} - {timerstop}: {title}" />
|
||||
</areascroll>
|
||||
</listelement>
|
||||
<!-- additional element which is drawn for current element -->
|
||||
<!-- Available Variables channels menu currentelement:
|
||||
{title} Title of Timer
|
||||
{timerstart} Start Time of Timer in hh::mm
|
||||
{timerstop} End Time of Timer in hh::mm
|
||||
{day} Day (numerical)
|
||||
{dayname} Day, for repeating timers days where timer is active
|
||||
{month} Month (two digits)
|
||||
{monthname} Month, three letter abbrevation
|
||||
{year} Year (4 digits)
|
||||
{channelname} Name of channel which is set for the timer
|
||||
{channelid} ID of channel which is set for the timer (for dispalying channel logo)
|
||||
{channelnumber} Number of channel which is set for the timer
|
||||
{eventtitle} Title of corresponding event
|
||||
{eventstart} Start Time of corresponding event in hh::mm
|
||||
{eventstop} Stop Time of corresponding event in hh::mm
|
||||
{eventshorttext} Short Text corresponding event
|
||||
{eventdescription} Description corresponding event
|
||||
{hasposter} true if a scraped poster is available for event
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{flagactive} true if timer is active
|
||||
{flaginstant} true if timer is an instant timer
|
||||
{flagvps} true if timer uses VPS
|
||||
{flagrecording} true if is recording currently
|
||||
{flagpending} true if timer is pending
|
||||
-->
|
||||
<currentelement delay="500" fadetime="0">
|
||||
<area x="63%" y="0" width="36%" height="15%" layer="2">
|
||||
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" y="0" width="30%" height="100%" />
|
||||
@ -83,10 +32,7 @@
|
||||
</area>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
<!-- Available Variables colorbuttons:
|
||||
{height} height in one-tenth of a percent of total height
|
||||
{offset} offset from top in one-tenth of a percent of total height
|
||||
-->
|
||||
|
||||
<scrollbar>
|
||||
<area x="60%" y="10%" width="2%" height="82%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
@ -94,4 +40,4 @@
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
</menutimers>
|
||||
</menutimers>
|
||||
|
@ -8,13 +8,6 @@
|
||||
</area>
|
||||
</background>
|
||||
|
||||
<!-- Available Variables message:
|
||||
{text} message text
|
||||
{status} true if message is a status message
|
||||
{info} true if message is a info message
|
||||
{warning} true if message is a warn message
|
||||
{error} true if message is a error message
|
||||
-->
|
||||
<message>
|
||||
<area x="0" y="0" width="100%" height="100%" layer="2">
|
||||
<drawrectangle condition="{status}" x="20" y="0" width="20" height="100%" color="{clrGreen}" />
|
||||
|
@ -21,17 +21,6 @@
|
||||
</area>
|
||||
</backgroundmodeonly>
|
||||
|
||||
<!-- Available Variables datetime:
|
||||
{time} time in hh:mm
|
||||
{day} day in digits
|
||||
{dayleadingzero} day in digits with leading 0
|
||||
{dayname} Full name of the day
|
||||
{daynameshort} Short 3 char name of the day
|
||||
{month} month in digits with leading 0
|
||||
{monthname} Full name of the month
|
||||
{monthnameshort} 3 letter abbrivation of month name
|
||||
{year} year in yyyy
|
||||
-->
|
||||
<datetime>
|
||||
<area x="70%" y="0" width="13%" height="13%" layer="2">
|
||||
<drawtext align="right" y="0" font="{light}" fontsize="50%" color="{clrWhite}" text="{dayname}" />
|
||||
@ -42,22 +31,6 @@
|
||||
</area>
|
||||
</datetime>
|
||||
|
||||
<!-- Available Variables scrapercontent:
|
||||
{posterpath} Full Path of Poster to use in image path attribute
|
||||
{posterwidth} width of poster in pixel
|
||||
{posterheight} height of poster in pixel
|
||||
{hasPoster} true if poster is available
|
||||
{bannerpath} Full Path of banner to use in image path attribute
|
||||
{bannerwidth} width of banner in pixel
|
||||
{bannerheight} height of banner in pixel
|
||||
{hasBanner} true if banner is available
|
||||
|
||||
Use this tokens if you want to display a banner for series and a poster for movies:
|
||||
{mediapath} Full Path of Poster or Banner to use in image path attribute
|
||||
{mediawidth} width of image in pixel
|
||||
{mediaheight} height of image in pixel
|
||||
{isbanner} true if image is a banner, false if it is a poster
|
||||
-->
|
||||
<scrapercontent>
|
||||
<area condition="{isbanner}" x="0" y="0" width="{areaheight}*0.13*{mediawidth}/{mediaheight}" height="13%" layer="2">
|
||||
<drawimage imagetype="image" path="{mediapath}" align="center" valign="center" width="{areawidth}" height="{areaheight}"/>
|
||||
@ -67,12 +40,6 @@
|
||||
</area>
|
||||
</scrapercontent>
|
||||
|
||||
<!-- Available Variables rectitle:
|
||||
{rectitle} Title of Recording
|
||||
{recsubtitle} Subtitle of the Recording
|
||||
{recdate} Date Recording in dd.mm.yy
|
||||
{rectime} Time of Recording in hh:mm
|
||||
-->
|
||||
<rectitle>
|
||||
<area x="1%" y="80%" width="69%" height="8%" layer="2">
|
||||
<drawtext x="0" name="title" valign="center" width="{areawidth}" font="{semibold}" fontsize="85%" color="{clrBlueLight}" text="{rectitle}" />
|
||||
@ -80,14 +47,6 @@
|
||||
</area>
|
||||
</rectitle>
|
||||
|
||||
<!-- Available Variables recinfo:
|
||||
{screenwidth} width of currently displayed recording in px
|
||||
{screenheight} height of currently displayed recording in px
|
||||
{resolution} resolution: hd1080i, hd720p, sd576i
|
||||
{aspect} screen aspect, each 4:3, 16:9 or 21:9
|
||||
{isHD} true for hd1080i and hd720p
|
||||
{isWideScreen} true if aspect is 16:9 or 21:9
|
||||
-->
|
||||
<recinfo>
|
||||
<area x="70%" y="80%" width="29%" height="8%" layer="2">
|
||||
<!-- widescreen icon -->
|
||||
@ -101,20 +60,12 @@
|
||||
</area>
|
||||
</recinfo>
|
||||
|
||||
<!-- Available Variables currenttime:
|
||||
{reccurrent} Current Time in hh:mm:ss
|
||||
-->
|
||||
<currenttime>
|
||||
<area x="1%" y="92%" width="30%" height="7%" layer="2">
|
||||
<drawtext x="0" valign="center" font="{light}" fontsize="100%" color="{clrTransBlueLight}" text="{reccurrent}" />
|
||||
</area>
|
||||
</currenttime>
|
||||
|
||||
<!-- Available Variables totaltime:
|
||||
{rectotal} Total Time in hh:mm:ss
|
||||
{timeshift} true if a timeshifted recording is displayed
|
||||
{timeshifttotal} Total Time of timeshift event in hh:mm
|
||||
-->
|
||||
<totaltime>
|
||||
<area x="69%" y="92%" width="30%" height="7%" layer="2">
|
||||
<drawtext condition="not{timeshift}" align="right" valign="center" font="{light}" fontsize="100%" color="{clrWhite}" text="{rectotal}" />
|
||||
@ -122,20 +73,12 @@
|
||||
</area>
|
||||
</totaltime>
|
||||
|
||||
<!-- Available Variables endtime:
|
||||
{recend} End Time in hh:mm
|
||||
-->
|
||||
<endtime>
|
||||
<area x="63%" y="92%" width="20%" height="7%" layer="2">
|
||||
<drawtext align="center" valign="bottom" font="{light}" fontsize="60%" color="{clrWhite}" text="{tr(endsat)}: {recend}" />
|
||||
</area>
|
||||
</endtime>
|
||||
<!-- Available Variables progressbar:
|
||||
{current} current frame of recording
|
||||
{total} total frames of recording
|
||||
{timeshift} true if a timeshifted recording is displayed
|
||||
{timeshifttotal} total number of frames of timeshift event
|
||||
-->
|
||||
|
||||
<progressbar>
|
||||
<area condition="not{timeshift}" x="5%" y="89%" width="90%" height="3%" layer="2">
|
||||
<fill color="{clrDarkGray}" />
|
||||
@ -148,16 +91,6 @@
|
||||
</area>
|
||||
</progressbar>
|
||||
|
||||
<!-- Available Variables cutmarks:
|
||||
{timeshift} true if a timeshifted recording is displayed
|
||||
{marks[]} array of available marks
|
||||
{marks[position]} frame of current mark
|
||||
{marks[endposition]} frame where startmark ends
|
||||
{marks[total]} total number of frames
|
||||
{marks[timeshifttotal]} total number of frames of timeshift event
|
||||
{marks[active]} true if current replay position hits exactly the mark
|
||||
{marks[startmark]} true if mark is start mark
|
||||
-->
|
||||
<cutmarks>
|
||||
<area condition="not{timeshift}" x="5%" y="89%" width="90%" height="3%" layer="3">
|
||||
<loop name="marks" x="0" y="0" orientation="absolute">
|
||||
@ -197,18 +130,6 @@
|
||||
</area>
|
||||
</cutmarks>
|
||||
|
||||
<!-- Available Variables controlicons and controliconsmodeonly:
|
||||
{play} true if recording is played currently
|
||||
{pause} true if recording is paused
|
||||
{forward} true if fast forwarding
|
||||
{forward1x} true if fast forwarding 1x (with 3 trickspeeds)
|
||||
{forward2x} true if fast forwarding 2x (with 3 trickspeeds)
|
||||
{forward3x} true if fast forwarding 3x (with 3 trickspeeds)
|
||||
{rewind} true if rewinding
|
||||
{rewind1x} true if rewinding 1x (with 3 trickspeeds)
|
||||
{rewind2x} true if rewinding 2x (with 3 trickspeeds)
|
||||
{rewind3x} true if rewinding 3x (with 3 trickspeeds)
|
||||
-->
|
||||
<controlicons>
|
||||
<area x="30%" y="93%" width="40%" height="7%" layer="3">
|
||||
<drawimage condition="not{rewind} ++ not{rewind1x} ++ not{rewind2x} ++ not{rewind3x}" imagetype="icon" path="ico_rew_off" x="{areawidth}/2 - 2*{areaheight}" y="0" width="{areaheight}" height="{areaheight}"/>
|
||||
@ -253,9 +174,6 @@
|
||||
</area>
|
||||
</controliconsmodeonly>
|
||||
|
||||
<!-- Available Variables jump:
|
||||
{jump} time to jump to in hh:mm
|
||||
-->
|
||||
<jump>
|
||||
<area x="35%" y="45%" width="30%" height="10%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
@ -265,114 +183,6 @@
|
||||
</area>
|
||||
</jump>
|
||||
|
||||
<!-- Available Variables onpause and onpausemodeonly:
|
||||
{name} title of recording
|
||||
{shorttext} shorttext of recording
|
||||
{description} description of recording
|
||||
{date} date of recording in dd.mm.yy
|
||||
{time} time of recording in hh:mm
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{duration} real duration of recording in minutes
|
||||
{durationhours} real duration, full hours
|
||||
{durationminutes} real duration, rest of minutes
|
||||
{durationevent} duration of corresponding event in minutes
|
||||
{durationeventhours} event duration, full hours
|
||||
{durationeventminutes} event duration, rest of minutes
|
||||
|
||||
{ismovie} true if event is scraped as a movie
|
||||
Available variables for movies:
|
||||
{movietitle} movie title from themoviedb
|
||||
{movieoriginalTitle} movie original title from themoviedb
|
||||
{movietagline} movie tagline from themoviedb
|
||||
{movieoverview} movie overview from themoviedb
|
||||
{movieadult} true if movie is rated as adult
|
||||
{moviebudget} movie budget from themoviedb in $
|
||||
{movierevenue} movie revenue from themoviedb in $
|
||||
{moviegenres} movie genres from themoviedb
|
||||
{moviehomepage} movie homepage from themoviedb
|
||||
{moviereleasedate} movie release date from themoviedb
|
||||
{movieruntime} movie runtime from themoviedb
|
||||
{moviepopularity} movie popularity from themoviedb
|
||||
{movievoteaverage} movie vote average from themoviedb
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{fanartwidth} width of scraped fanart
|
||||
{fanartheight} height of scraped fanart
|
||||
{fanartpath} absolute path of scraped fanart
|
||||
{movieiscollection} true if movie is part of a collection
|
||||
{moviecollectionName} name of movie collection
|
||||
{collectionposterwidth} width of scraped collection poster
|
||||
{collectionposterheight} height of scraped collection poster
|
||||
{collectionposterpath} absolute path of scraped collection poster
|
||||
{collectionfanartwidth} width of scraped collection fanart
|
||||
{collectionfanartheight} height of scraped collection fanart
|
||||
{collectionfanartpath} absolute path of scraped collection fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
|
||||
{isseries} true if event is scraped as a series
|
||||
Available variables for series:
|
||||
{seriesname} name of series
|
||||
{seriesoverview} series overview
|
||||
{seriesfirstaired} first aired date
|
||||
{seriesnetwork} network which produces series
|
||||
{seriesgenre} series genre
|
||||
{seriesrating} series thetvdb rating
|
||||
{seriesstatus} status of series (running / finished)
|
||||
{episodetitle} title of episode
|
||||
{episodenumber} number of episode
|
||||
{episodeseason} season of episode
|
||||
{episodefirstaired} first aired date of episode
|
||||
{episodegueststars} guest stars of episode
|
||||
{episodeoverview} episode overview
|
||||
{episoderating} user rating for episode
|
||||
{episodeimagewidth} episode image width
|
||||
{episodeimageheight} episode image height
|
||||
{episodeimagepath} episode image path
|
||||
{seasonposterwidth} episode season poster width
|
||||
{seasonposterheight} episode season poster height
|
||||
{seasonposterpath} episode season poster path
|
||||
{seriesposter1width} width of 1st poster
|
||||
{seriesposter1height} height of 1st poster
|
||||
{seriesposter1path} path of 1st poster
|
||||
{seriesposter2width} width of 2nd poster
|
||||
{seriesposter2height} height of 2nd poster
|
||||
{seriesposter2path} path of 2nd poster
|
||||
{seriesposter3width} width of 3rd poster
|
||||
{seriesposter3height} height of 3rd poster
|
||||
{seriesposter3path} path of 3rd poster
|
||||
{seriesfanart1width} width of 1st fanart
|
||||
{seriesfanart1height} height of 1st fanart
|
||||
{seriesfanart1path} path of 1st fanart
|
||||
{seriesfanart2width} width of 2nd fanart
|
||||
{seriesfanart2height} height of 2nd fanart
|
||||
{seriesfanart2path} path of 2nd fanart
|
||||
{seriesfanart3width} width of 3rd fanart
|
||||
{seriesfanart3height} height of 3rd fanart
|
||||
{seriesfanart3path} path of 3rd fanart
|
||||
{seriesbanner1width} width of 1st banner
|
||||
{seriesbanner1height} height of 1st banner
|
||||
{seriesbanner1path} path of 1st banner
|
||||
{seriesbanner2width} width of 2nd banner
|
||||
{seriesbanner2height} height of 2nd banner
|
||||
{seriesbanner2path} path of 2nd banner
|
||||
{seriesbanner3width} width of 3rd banner
|
||||
{seriesbanner3height} height of 3rd banner
|
||||
{seriesbanner3path} path of 3rd fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
-->
|
||||
<onpause delay="60" fadetime="{fadeTime}">
|
||||
<area x="0" y="0" width="100%" height="100%" layer="7">
|
||||
<fill color="{clrSemiTransBlack}" />
|
||||
@ -390,13 +200,6 @@
|
||||
</area>
|
||||
</onpausemodeonly>
|
||||
|
||||
<!-- Available Variables message:
|
||||
{text} message text
|
||||
{status} true if message is a status message
|
||||
{info} true if message is a info message
|
||||
{warning} true if message is a warn message
|
||||
{error} true if message is a error message
|
||||
-->
|
||||
<message>
|
||||
<area x="10%" y="45%" width="80%" height="10%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
|
@ -8,12 +8,6 @@
|
||||
</area>
|
||||
</background>
|
||||
|
||||
<!-- Available Variables volume:
|
||||
{volume} current volume, range from 0 to 255
|
||||
{volpercent} current volume in %
|
||||
{maxvolume} maximal volume
|
||||
{mute} true if volume is muted
|
||||
-->
|
||||
<volume>
|
||||
<area x="0" y="0" width="100%" height="50%" layer="2">
|
||||
<drawtext x="10" valign="center" font="{light}" fontsize="100%" color="{clrWhite}" text="{tr(volume)}: {volpercent}%" />
|
||||
|
@ -70,22 +70,7 @@
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
<!-- Available Variables in detailheader and tab:
|
||||
{menuheader} "Preview: Skin <skinname>"
|
||||
{skinname} name of skin
|
||||
{author} skin author
|
||||
|
||||
{fonts[]} array with fonts used by skin
|
||||
{fonts[name]} name of font
|
||||
{fonts[installed]} true if font is installed on system
|
||||
|
||||
{plugins[]} array with plugins supported by skin
|
||||
{plugins[name]} name of plugin
|
||||
|
||||
{screenshots[]} array with screenshots
|
||||
{screenshots[desc]} description of screenshot
|
||||
{screenshots[path]} screenshot path
|
||||
-->
|
||||
|
||||
<detailheader>
|
||||
<area x="0" y="0" width="100%" height="20%" layer="2">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
|
@ -15,10 +15,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Available Variables scrollbar:
|
||||
{height} height of scrollbar in tenth of a percent of total height
|
||||
{offset} offset in tenth of a percent of total height
|
||||
-->
|
||||
<scrollbar>
|
||||
<area x="98%" y="20%" width="2%" height="65%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
@ -27,28 +23,6 @@
|
||||
</area>
|
||||
</scrollbar>
|
||||
|
||||
<!-- Available Variables Footer:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
<viewelement name="footer">
|
||||
<area x="0" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -92,50 +66,10 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Available Variables time:
|
||||
{time} timestring in hh:mm
|
||||
{sec} current seconds
|
||||
{min} current minutes
|
||||
{hour} current hours
|
||||
{hmins} current "hourminutes" to display an hour hand
|
||||
-->
|
||||
<viewelement name="time">
|
||||
</viewelement>
|
||||
|
||||
|
||||
<!-- Available Variables in detailheader elements:
|
||||
{title} title of event
|
||||
{shorttext} shorttext of event
|
||||
{start} event start time in hh::mm
|
||||
{stop} event stop time
|
||||
{day} Day of event as three letter abrivation
|
||||
{date} date of current event in dd.mm.yy
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{running} true if event is currently running
|
||||
{elapsed} elapsed time of event, if not running 0
|
||||
{duration} duration of event
|
||||
{durationhours} duration, full hours
|
||||
{durationminutes} duration, rest of minutes
|
||||
{vps} vps description string
|
||||
{channelname} Channelname of event
|
||||
{channelnumber} Channelnumber of event
|
||||
{channellogoexists} true if a channel logo exists
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{ismovie} true if event is scraped as a movie
|
||||
{isseries} true if event is scraped as a series
|
||||
{posteravailable} true if a poster is available
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{banneravailable} true if a banner is available
|
||||
{bannerwidth} width of banner
|
||||
{bannerheight} height of banner
|
||||
{bannerpath} path of banner
|
||||
{epgpicavailable} true if a epg picture is available
|
||||
{epgpicpath} path of epg picture
|
||||
-->
|
||||
<viewelement name="header">
|
||||
<area x="1%" y="0" width="98%" height="20%" layer="3">
|
||||
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="15%" height="80%" valign="center" />
|
||||
@ -149,140 +83,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Available Variables in tab elements:
|
||||
{title} title of event
|
||||
{shorttext} shorttext of event
|
||||
{description} description of event
|
||||
{start} event start time in hh::mm
|
||||
{stop} event stop time
|
||||
{day} Day of event as three letter abrivation
|
||||
{date} date of current event in dd.mm.yy
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{running} true if event is currently running
|
||||
{elapsed} elapsed time of event, if not running 0
|
||||
{duration} duration of event
|
||||
{durationhours} duration, full hours
|
||||
{durationminutes} duration, rest of minutes
|
||||
{vps} vps description string
|
||||
{channellogoexists} true if a channel logo exists
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{hasreruns} true if reruns of this event are found
|
||||
{reruns[]} array with reruns
|
||||
{reruns[title]} title of rerun
|
||||
{reruns[shorttext]} shorttext of rerun
|
||||
{reruns[date]} date of rerun in dd:mm
|
||||
{reruns[day]} short dayname of rerun
|
||||
{reruns[start]} start time of rerun in hh:mm
|
||||
{reruns[stop]} stop time of rerun in hh:mm
|
||||
{reruns[channelname]} name of channel on which rerun occurs
|
||||
{reruns[channelnumber]} number of channel on which rerun occurs
|
||||
{reruns[channelid]} id of channel on which rerun occurs to display channel logo
|
||||
{reruns[channellogoexists]} true if channel logo exists
|
||||
{epgpic1avaialble} true if first epg picture is available
|
||||
{epgpic2avaialble} true if first epg picture is available
|
||||
{epgpic3avaialble} true if first epg picture is available
|
||||
{epgpic1path} path of first epg picture
|
||||
{epgpic2path} path of second epg picture
|
||||
{epgpic3path} path of third epg picture
|
||||
|
||||
{ismovie} true if event is scraped as a movie
|
||||
Available variables for movies:
|
||||
{movietitle} movie title from themoviedb
|
||||
{movieoriginalTitle} movie original title from themoviedb
|
||||
{movietagline} movie tagline from themoviedb
|
||||
{movieoverview} movie overview from themoviedb
|
||||
{movieadult} true if movie is rated as adult
|
||||
{moviebudget} movie budget from themoviedb in $
|
||||
{movierevenue} movie revenue from themoviedb in $
|
||||
{moviegenres} movie genres from themoviedb
|
||||
{moviehomepage} movie homepage from themoviedb
|
||||
{moviereleasedate} movie release date from themoviedb
|
||||
{movieruntime} movie runtime from themoviedb
|
||||
{moviepopularity} movie popularity from themoviedb
|
||||
{movievoteaverage} movie vote average from themoviedb
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
{fanartwidth} width of scraped fanart
|
||||
{fanartheight} height of scraped fanart
|
||||
{fanartpath} absolute path of scraped fanart
|
||||
{movieiscollection} true if movie is part of a collection
|
||||
{moviecollectionName} name of movie collection
|
||||
{collectionposterwidth} width of scraped collection poster
|
||||
{collectionposterheight} height of scraped collection poster
|
||||
{collectionposterpath} absolute path of scraped collection poster
|
||||
{collectionfanartwidth} width of scraped collection fanart
|
||||
{collectionfanartheight} height of scraped collection fanart
|
||||
{collectionfanartpath} absolute path of scraped collection fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
|
||||
{isseries} true if event is scraped as a series
|
||||
Available variables for series:
|
||||
{seriesname} name of series
|
||||
{seriesoverview} series overview
|
||||
{seriesfirstaired} first aired date
|
||||
{seriesnetwork} network which produces series
|
||||
{seriesgenre} series genre
|
||||
{seriesrating} series thetvdb rating
|
||||
{seriesstatus} status of series (running / finished)
|
||||
{episodetitle} title of episode
|
||||
{episodenumber} number of episode
|
||||
{episodeseason} season of episode
|
||||
{episodefirstaired} first aired date of episode
|
||||
{episodegueststars} guest stars of episode
|
||||
{episodeoverview} episode overview
|
||||
{episoderating} user rating for episode
|
||||
{episodeimagewidth} episode image width
|
||||
{episodeimageheight} episode image height
|
||||
{episodeimagepath} episode image path
|
||||
{seasonposterwidth} episode season poster width
|
||||
{seasonposterheight} episode season poster height
|
||||
{seasonposterpath} episode season poster path
|
||||
{seriesposter1width} width of 1st poster
|
||||
{seriesposter1height} height of 1st poster
|
||||
{seriesposter1path} path of 1st poster
|
||||
{seriesposter2width} width of 2nd poster
|
||||
{seriesposter2height} height of 2nd poster
|
||||
{seriesposter2path} path of 2nd poster
|
||||
{seriesposter3width} width of 3rd poster
|
||||
{seriesposter3height} height of 3rd poster
|
||||
{seriesposter3path} path of 3rd poster
|
||||
{seriesfanart1width} width of 1st fanart
|
||||
{seriesfanart1height} height of 1st fanart
|
||||
{seriesfanart1path} path of 1st fanart
|
||||
{seriesfanart2width} width of 2nd fanart
|
||||
{seriesfanart2height} height of 2nd fanart
|
||||
{seriesfanart2path} path of 2nd fanart
|
||||
{seriesfanart3width} width of 3rd fanart
|
||||
{seriesfanart3height} height of 3rd fanart
|
||||
{seriesfanart3path} path of 3rd fanart
|
||||
{seriesbanner1width} width of 1st banner
|
||||
{seriesbanner1height} height of 1st banner
|
||||
{seriesbanner1path} path of 1st banner
|
||||
{seriesbanner2width} width of 2nd banner
|
||||
{seriesbanner2height} height of 2nd banner
|
||||
{seriesbanner2path} path of 2nd banner
|
||||
{seriesbanner3width} width of 3rd banner
|
||||
{seriesbanner3height} height of 3rd banner
|
||||
{seriesbanner3path} path of 3rd fanart
|
||||
{actors[]} array with movie actors
|
||||
{actors[name]} real name of actor
|
||||
{actors[role]} actor role
|
||||
{actors[thumb]} absolute path of scraped actor thumb
|
||||
{actors[thumbwidth]} width of scraped actor thumb
|
||||
{actors[thumbheight]} height of scraped actor thumb
|
||||
-->
|
||||
|
||||
<!-- a tab is one scrolling area, just position and draw as inside a normal area -->
|
||||
<!-- just define as many tabs as needed -->
|
||||
|
||||
<!-- TAB EPGINFO -->
|
||||
<tab name="EPG Info" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
|
||||
<drawtextbox condition="not{isseries}++not{ismovie}" x="0" y="0" width="96%" font="{light}" fontsize="8%" color="{clrWhite}" text="{description}" />
|
||||
@ -343,14 +143,6 @@
|
||||
</tab>
|
||||
|
||||
|
||||
<!-- Available Variables tablabels:
|
||||
{currenttab} name of currently active tab
|
||||
{prevtab} name of prev tab
|
||||
{nexttab} name of next tab
|
||||
{tabs[]} array with available tab labels
|
||||
{tabs[title]} title of tab
|
||||
{tabs[current]} true if tab is displayed currently
|
||||
-->
|
||||
<tablabels>
|
||||
<area x="0" y="85%" width="98%" height="5%" layer="3">
|
||||
<loop name="tabs" x="0" y="0" orientation="horizontal">
|
||||
|
@ -2,11 +2,6 @@
|
||||
<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
|
||||
|
||||
<displayplugin x="0" y="0" width="100%" height="100%">
|
||||
<!-- Available Variables Background:
|
||||
{menuwidth} menuwidth in percent of screenwidth
|
||||
{menuheight} menuheight in percent of screenheight
|
||||
{hasscrollbar} true if menu needs a scrollbar
|
||||
-->
|
||||
<viewelement name="background">
|
||||
<area condition="not{hasscrollbar}" x="0" y="0" width="100%" height="100%" layer="4">
|
||||
<drawrectangle x="{areawidth}/2 - {menuwidth}*{areawidth}/100/2" y="{areaheight}/2 - {menuheight}*{areaheight}/100/2" width="{menuwidth}*{areawidth}/100" height="{menuheight}*{areaheight}/100" color="{clrTransBlack}" />
|
||||
@ -16,13 +11,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Available Variables Scrollbar:
|
||||
{menuwidth} menuwidth in percent of screenwidth
|
||||
{posy} y position of scrollbar start in percent of screenheight
|
||||
{totalheight} height of complete scrollbar in percent of screenheight
|
||||
{height} height in tenth of a percent of total height
|
||||
{offset} offset in tenth of a percent
|
||||
-->
|
||||
<viewelement name="scrollbar">
|
||||
<area x="0" y="0" width="100%" height="100%" layer="5">
|
||||
<drawrectangle x="{areawidth}/2 + {menuwidth}*{areawidth}/100/2" y="{posy}*{areaheight}/100" width="2%" height="{totalheight}*{areaheight}/100" color="{clrWhite}" />
|
||||
@ -34,21 +22,10 @@
|
||||
</viewelement>
|
||||
|
||||
<grid name="recmenu" x="0" y="0" width="100%" height="100%">
|
||||
<!-- Background
|
||||
{current} true if item is currently selected
|
||||
-->
|
||||
<area condition="not{info}++not{buttonyesno}++not{timerconflictheader}++not{timerconflict}++not{timelineheader}++not{timelinetimer}" layer="5">
|
||||
<fill condition="{current}" color="{clrTransBlueLight}" />
|
||||
<fill condition="not{current}" color="{clrTransBlack}" />
|
||||
</area>
|
||||
<!-- info item
|
||||
{info} true
|
||||
{lines} number of lines to display (max. 4)
|
||||
{line1} text of line 1
|
||||
{line2} text of line 1
|
||||
{line3} text of line 1
|
||||
{line4} text of line 1
|
||||
-->
|
||||
<area condition="{info}" layer="5">
|
||||
<drawtext condition="eq({lines}, 1)" align="center" valign="center" font="{semibold}" fontsize="60%" color="{clrWhite}" text="{line1}" />
|
||||
|
||||
@ -64,20 +41,9 @@
|
||||
<drawtext condition="eq({lines}, 4)" align="center" y="50%" font="{semibold}" fontsize="22%" color="{clrWhite}" text="{line3}" />
|
||||
<drawtext condition="eq({lines}, 4)" align="center" y="75%" font="{semibold}" fontsize="22%" color="{clrWhite}" text="{line4}" />
|
||||
</area>
|
||||
<!-- button
|
||||
{button} true
|
||||
{buttontext} text to display on button
|
||||
-->
|
||||
<area condition="{button}" layer="6">
|
||||
<drawtext align="center" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{buttontext}" />
|
||||
</area>
|
||||
|
||||
<!-- yes / no button
|
||||
{buttonyesno} true
|
||||
{yes} true if button is set to yes
|
||||
{textyes} text to display on yes button
|
||||
{textno} text to display on no button
|
||||
-->
|
||||
<areacontainer condition="{buttonyesno}">
|
||||
<area layer="5">
|
||||
<drawrectangle condition="not{current}" x="2%" y="5%" width="46%" height="90%" color="{clrDarkGray}"/>
|
||||
@ -92,42 +58,21 @@
|
||||
<drawtext name="notext" x="3*{areawidth}/4 - {width(notext)}/2" valign="center" font="{light}" fontsize="70%" color="{clrWhite}" text="{textno}" />
|
||||
</area>
|
||||
</areacontainer>
|
||||
<!-- Int Selector
|
||||
{intselector} true
|
||||
{text} title of selector
|
||||
{value} current value of selector, integer
|
||||
-->
|
||||
<area condition="{intselector}" layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
<drawtext align="right" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{value} " />
|
||||
</area>
|
||||
<!-- Bool Selector
|
||||
{boolselector} true
|
||||
{text} title of selector
|
||||
{value} current value of selector, true or false
|
||||
-->
|
||||
<area condition="{boolselector}" layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
<drawimage condition="{value}" imagetype="icon" path="ico_yes" x="{areawidth} - {areaheight}*0.8" y="10%" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
|
||||
<drawimage condition="not{value}" imagetype="icon" path="ico_no" x="{areawidth} - {areaheight}*0.8" y="10%" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
|
||||
</area>
|
||||
<!-- String Selector
|
||||
{stringselector} true
|
||||
{text} title of selector
|
||||
{value} current value of selector, string
|
||||
-->
|
||||
<area condition="{stringselector}" layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
<drawimage imagetype="icon" path="ico_arrow_right" x="{areawidth} - {areaheight}*0.8" y="10%" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
|
||||
<drawtext name="value" x="{areawidth} - {width(value)} - {areaheight}" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{value}" />
|
||||
<drawimage imagetype="icon" path="ico_arrow_left" x="{areawidth} - {width(value)} - 2*{areaheight}" y="10%" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
|
||||
</area>
|
||||
<!-- Text Input
|
||||
{textinput} true
|
||||
{editmode} true if currently in edit mode
|
||||
{text} title of selector
|
||||
{value} current value of selector, string
|
||||
-->
|
||||
<areacontainer condition="{textinput}">
|
||||
<area layer="6">
|
||||
<drawtext x="1%" y="10%" font="{light}" fontsize="40%" color="{clrWhite}" text="{text}" />
|
||||
@ -138,32 +83,14 @@
|
||||
<drawtext align="right" y="55%" font="{light}" fontsize="40%" color="{clrBlack}" text="{value} " />
|
||||
</area>
|
||||
</areacontainer>
|
||||
<!-- Time Selector
|
||||
{timeselector} true
|
||||
{text} title of selector
|
||||
{value} current value of selector, hh:mm
|
||||
-->
|
||||
<area condition="{timeselector}" layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
<drawtext align="right" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{value} " />
|
||||
</area>
|
||||
<!-- Day Selector
|
||||
{dayselector} true
|
||||
{text} title of selector
|
||||
{value} current value of selector, dd.mm
|
||||
-->
|
||||
<area condition="{dayselector}" layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
<drawtext align="right" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{value} " />
|
||||
</area>
|
||||
<!-- Channel Selector
|
||||
{channelselector} true
|
||||
{text} title of selector
|
||||
{channelnumber} number of currently selected channel, 0 for "all channels"
|
||||
{channelname} name of channel or "all channels"
|
||||
{channelid} id of channel
|
||||
{channellogoexisis} true if channel logo exists
|
||||
-->
|
||||
<area condition="{channelselector}" layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
<drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="{areawidth}-{areaheight}" valign="center" width="{areaheight}*0.9" height="{areaheight}*0.9" />
|
||||
@ -171,13 +98,6 @@
|
||||
<drawtext condition="not{channellogoexisis}++{channelnumber}" align="right" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{channelnumber} {channelname} " />
|
||||
<drawtext condition="not{channelnumber}" align="right" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{channelname} " />
|
||||
</area>
|
||||
<!-- Weekday Selector
|
||||
{weekdayselector} true
|
||||
{text} title of selector
|
||||
{dayselected} number of currently selected day (0 - 6)
|
||||
{day0abbr} ... {day6abbr} localized one character abbrevation for weekdays from Monday to Sunday
|
||||
{day0set} ... {day6set} true if according weekday from Monday to Sunday is set
|
||||
-->
|
||||
<areacontainer condition="{weekdayselector}">
|
||||
<area layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
@ -223,27 +143,12 @@
|
||||
<drawtext name="day6" x="{areawidth} - {areaheight}*1.0 + {areaheight}/4 - {width(day6)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day6abbr}" />
|
||||
</area>
|
||||
</areacontainer>
|
||||
<!-- Directory Selector
|
||||
{directoryselector} true
|
||||
{text} title of selector
|
||||
{folder} current folder of selector, string
|
||||
-->
|
||||
<area condition="{directoryselector}" layer="6">
|
||||
<drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
<drawimage imagetype="icon" path="ico_arrow_right" x="{areawidth} - {areaheight}*0.8" y="10%" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
|
||||
<drawtext name="folder" x="{areawidth} - {width(folder)} - {areaheight}" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{folder}" />
|
||||
<drawimage imagetype="icon" path="ico_arrow_left" x="{areawidth} - {width(folder)} - 2*{areaheight}" y="10%" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
|
||||
</area>
|
||||
<!-- Timerconflict Header
|
||||
{timerconflictheader} true
|
||||
{text} title of Timerconflict Header
|
||||
{conflictstart} start of conflict in hh:mm
|
||||
{conflictstop} end of conflict in hh:mm
|
||||
{overlapstart} start of overlap in hh:mm
|
||||
{overlapstop} end of overlap in hh:mm
|
||||
{overlapstartpercent} start of overlap in percent of total conflict time width
|
||||
{overlapwidthpercent} width of overlap in percent of total conflict time width
|
||||
-->
|
||||
<areacontainer condition="{timerconflictheader}">
|
||||
<area layer="5">
|
||||
<drawtext name="title" x="{areawidth}*0.7*0.5 - {width(title)}/2" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
|
||||
@ -257,25 +162,6 @@
|
||||
<drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="50%" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="50%" color="{clrRedTrans}"/>
|
||||
</area>
|
||||
</areacontainer>
|
||||
<!-- Timerconflict
|
||||
{timerconflict} true
|
||||
{timertitle} title of timer
|
||||
{channelname} name of channel
|
||||
{channelid} channel ID
|
||||
{transponder} transponder of channel
|
||||
{starttime} start of timer in hh:mm
|
||||
{stoptime} end of timer in hh:mm
|
||||
{date} date of timer in dd.mm.yy
|
||||
{weekday} weekday of timer, 3 letter abrivation
|
||||
{infoactive} true if info icon is active
|
||||
{deleteactive} true if delete icon is active
|
||||
{editactive} true if edit icon is active
|
||||
{searchactive} true if search icon is active
|
||||
{timerstartpercent} start of timer in percent of total conflict time width
|
||||
{timerwidthpercent} end of timer in percent of total conflict time width
|
||||
{overlapstartpercent} start of overlap in percent of total conflict time width
|
||||
{overlapwidthpercent} width of overlap in percent of total conflict time width
|
||||
-->
|
||||
<areacontainer condition="{timerconflict}">
|
||||
<area layer="5">
|
||||
<drawimage condition="not{current}" imagetype="skinpart" path="menubutton" x="0" y="0" width="70%" height="100%"/>
|
||||
@ -300,20 +186,6 @@
|
||||
<drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="0" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="100%" color="{clrRedTrans}"/>
|
||||
</area>
|
||||
</areacontainer>
|
||||
<!-- Event
|
||||
{event} true
|
||||
{title} title of event
|
||||
{shorttext} shorttext of event
|
||||
{starttime} start of event in hh:mm
|
||||
{stoptime} end of event in hh:mm
|
||||
{date} date of event in dd.mm.yy
|
||||
{weekday} weekday of event, 3 letter abrivation
|
||||
{channelnumber} number of channel
|
||||
{channelname} name of channel
|
||||
{channelid} id of channel
|
||||
{channellogoexisis} true if channel logo exists
|
||||
{hastimer} true if event has a timer
|
||||
-->
|
||||
<area condition="{event}" layer="6">
|
||||
<drawimage condition="{current}" imagetype="icon" path="ico_info_active" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
<drawimage condition="not{current}" imagetype="icon" path="ico_info_inactive" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
@ -325,31 +197,10 @@
|
||||
<drawimage condition="not{current}++not{hastimer}" imagetype="icon" path="ico_record_inactive" x="{areawidth} - {areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
<drawimage condition="{hastimer}" imagetype="icon" path="ico_activetimer" x="{areawidth} - {areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
</area>
|
||||
<!-- Recording
|
||||
{recording} true
|
||||
{recname} title of recording
|
||||
{recstarttime} start of recording in hh:mm
|
||||
{recdate} date of recording in dd.mm.yy
|
||||
{recduration} duration of recording in min
|
||||
{channelnumber} number of channel
|
||||
{channelname} name of channel
|
||||
{channelid} id of channel
|
||||
{channellogoexisis} true if channel logo exists
|
||||
-->
|
||||
<area condition="{recording}" layer="6">
|
||||
<drawtext x="1%" y="0" font="{light}" width="98%" fontsize="50%" color="{clrWhite}" text="{recname}" />
|
||||
<drawtext x="55%" y="0" font="{light}" width="98%" fontsize="35%" color="{clrWhite}" text="{recdate} {recstarttime} - {recduration} min, {channelname}" />
|
||||
</area>
|
||||
<!-- Searchtimer
|
||||
{searchtimer} true
|
||||
{timeractive} true if searchtimer is active
|
||||
{searchstring} searchtimer search string
|
||||
{activetimers} number of active timers caused by this searchtimer
|
||||
{recordingsdone} number of recordings done by this searchtimer
|
||||
{searchactive} true if search icon is active
|
||||
{editactive} true if edit icon is active
|
||||
{deleteactive} true if delete icon is active
|
||||
-->
|
||||
<area condition="{searchtimer}" layer="6">
|
||||
<drawimage condition="{current}++{searchactive}" imagetype="icon" path="ico_search_active" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
<drawimage condition="not{current}||not{searchactive}" imagetype="icon" path="ico_search_inactive" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
@ -361,22 +212,6 @@
|
||||
<drawtext condition="{timeractive}" align="right" y="5%" font="{regular}" fontsize="35%" color="{clrWhite}" text="active " />
|
||||
<drawtext x="{areaheight}*1.8" y="55%" font="{light}" fontsize="35%" color="{clrWhite}" text="Active Timers: {activetimers}, Recordings: {recordingsdone}" />
|
||||
</area>
|
||||
<!-- Timeline Header
|
||||
{timelineheader} true
|
||||
{date} date of current day in weekdayname dd.mm.yyyy
|
||||
{timerset} true if timer info is set
|
||||
{channelname} name of channel of timer
|
||||
{channelid} channel ID of channel of timer
|
||||
{channellogoexisis} true if channel logo exists
|
||||
{channelnumber} number of channel of timer
|
||||
{channeltransponder} transponder of channel of timer
|
||||
{timerstart} start of timer in hh:mm
|
||||
{timerstop} end of timer in hh:mm
|
||||
{eventtitle} title of according event
|
||||
{eventshorttext} short text of according event
|
||||
{eventstart} start time of according event
|
||||
{eventstop} end time of according event
|
||||
-->
|
||||
<areacontainer condition="{timelineheader}">
|
||||
<area layer="5">
|
||||
<drawtext align="center" y="1%" font="{regular}" fontsize="35%" color="{clrWhite}" text="Timer for {date}" />
|
||||
@ -438,11 +273,6 @@
|
||||
<drawtext x="{areaheight}*0.8" y="57%" width="{areawidth}-{areaheight}" font="{light}" fontsize="25%" color="{clrWhite}" text="{eventtitle} - {eventshorttext}"/>
|
||||
</area>
|
||||
</areacontainer>
|
||||
<!-- Timeline Timer
|
||||
{timelinetimer} true
|
||||
{timerstart} start of timer in tenth percent of complete 24h width
|
||||
{timerwidth} width of timer in tenth percent of complete 24h width
|
||||
-->
|
||||
<areacontainer condition="{timelinetimer}">
|
||||
<area layer="5">
|
||||
<drawrectangle condition="{current}" x="5%" y="0" width="90%" height="100%" color="{clrTransBlueLight}"/>
|
||||
@ -453,10 +283,6 @@
|
||||
<drawrectangle x="{areawidth}*0.05 + {timerstart}*{areawidth}*0.9/1000" y="25%" width="{timerwidth}*{areawidth}*0.9/1000" height="50%" color="{clrBlack}"/>
|
||||
</area>
|
||||
</areacontainer>
|
||||
<!-- Favorites
|
||||
{favorite} true
|
||||
{favdesc} description of favorite
|
||||
-->
|
||||
<area condition="{favorite}" layer="6">
|
||||
<drawimage condition="{current}" imagetype="icon" path="ico_search_active" x="{areaheight}*0.1" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
<drawimage condition="not{current}" imagetype="icon" path="ico_search_inactive" x="{areaheight}*0.1" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
|
||||
|
@ -27,32 +27,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Tokens available in Header
|
||||
{isdummy} true if active element is a dummy element
|
||||
{title} title of event of active grid
|
||||
{shorttext} shorttext of event of active grid
|
||||
{description} detailed description of event of active grid
|
||||
{start} event start time in hh::mm
|
||||
{stop} event stop time
|
||||
{day} day of event of active grid
|
||||
{date} date of event of active grid in dd.mm.yy
|
||||
{daynumeric} day as number
|
||||
{month} month as number
|
||||
{year} year as number
|
||||
{running} true if event is currently running
|
||||
{elapsed} elapsed time of event, if not running 0
|
||||
{duration} duration of event
|
||||
{durationhours} duration, full hours
|
||||
{durationminutes} duration, rest of minutes
|
||||
{channelname} Channel Name
|
||||
{channelnumber} Channel Number
|
||||
{channelid} ChannelID as path to display channel logo
|
||||
{channellogoexists} true if channel logo exists
|
||||
{hasposter} true if a scraped poster is available for this element
|
||||
{posterwidth} width of scraped poster
|
||||
{posterheight} height of scraped poster
|
||||
{posterpath} absolute path of scraped poster
|
||||
-->
|
||||
<viewelement name="header_hor">
|
||||
<areascroll condition="not{isdummy}++not{hasposter}" orientation="vertical" mode="forthandback" delay="1000" scrollspeed="medium" x="1%" y="1%" width="68%" height="19%" layer="2">
|
||||
<drawtext x="0" y="0" font="{semibold}" width="100%" fontsize="25%" color="{clrWhite}" text="{day} {daynumeric}.{month} {start} - {stop}" />
|
||||
@ -95,28 +69,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Available Variables Footer:
|
||||
{red1} true if red button is button 1
|
||||
{red2} true if red button is button 2
|
||||
{red3} true if red button is button 3
|
||||
{red4} true if red button is button 4
|
||||
{green1} true if green button is button 1
|
||||
{green2} true if green button is button 2
|
||||
{green3} true if green button is button 3
|
||||
{green4} true if green button is button 4
|
||||
{yellow1} true if yellow button is button 1
|
||||
{yellow2} true if yellow button is button 2
|
||||
{yellow3} true if yellow button is button 3
|
||||
{yellow4} true if yellow button is button 4
|
||||
{blue1} true if blue button is button 1
|
||||
{blue2} true if blue button is button 2
|
||||
{blue3} true if blue button is button 3
|
||||
{blue4} true if blue button is button 4
|
||||
{red} label of red button
|
||||
{green} label of green button
|
||||
{yellow} label of yellow button
|
||||
{blue} label of blue button
|
||||
-->
|
||||
<viewelement name="footer_hor">
|
||||
<area x="0" y="92%" width="25%" height="8%" layer="2">
|
||||
<drawtext condition="{red1}" x="20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{red}" />
|
||||
@ -202,21 +154,7 @@
|
||||
<drawrectangle condition="{blue4}" x="0" y="0" width="10" height="100%" color="{clrBlue}" />
|
||||
</area>
|
||||
</viewelement>
|
||||
<!-- Available Variables time:
|
||||
{time} timestring in hh:mm
|
||||
{sec} current seconds
|
||||
{min} current minutes
|
||||
{hour} current hours
|
||||
{hmins} current "hourminutes" to display an hour hand
|
||||
{day} day in digits
|
||||
{dayleadingzero} day in digits with leading 0
|
||||
{dayname} Full name of the day
|
||||
{daynameshort} Short 3 char name of the day
|
||||
{month} month in digits with leading 0
|
||||
{monthname} Full name of the month
|
||||
{monthnameshort} 3 letter abbrivation of month name
|
||||
{year} year in yyyy
|
||||
-->
|
||||
|
||||
<viewelement name="time_hor">
|
||||
<area x="70%" y="0" width="{areawidth}*0.145" height="12%" layer="2">
|
||||
<drawtext align="right" y="5%" font="{light}" fontsize="45%" color="{clrWhite}" text="{dayname}" />
|
||||
@ -237,10 +175,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Tokens available in datetimeline
|
||||
{weekday} weekday of current display
|
||||
{date} date of current display
|
||||
-->
|
||||
<viewelement name="datetimeline_hor">
|
||||
<area x="0" y="20%" width="15%" height="5%" layer="3">
|
||||
<drawtext align="center" valign="center" font="{semibold}" fontsize="90%" color="{clrWhite}" text="{weekday} {date}" />
|
||||
@ -254,9 +188,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Tokens available in timeindicator
|
||||
{percenttotal} position of current time indicator in tenth of a percent of complete time shown
|
||||
-->
|
||||
<viewelement name="timeindicator_hor">
|
||||
<area x="15%" y="20%" width="85%" height="72%" layer="4">
|
||||
<drawrectangle x="{percenttotal}*{areawidth}/1000" y="0" width="1" height="100%" color="{clrRed}" />
|
||||
@ -269,9 +200,6 @@
|
||||
</area>
|
||||
</viewelement>
|
||||
|
||||
<!-- Tokens available in timeline
|
||||
{timestring} time of grid in hh:mm
|
||||
-->
|
||||
<grid name="timeline_hor" x="15%" y="20%" width="85%" height="5%">
|
||||
<area layer="1">
|
||||
<drawrectangle condition="{fullhour}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransWhite}"/>
|
||||
@ -294,12 +222,6 @@
|
||||
</area>
|
||||
</grid>
|
||||
|
||||
<!-- Tokens available in channels
|
||||
{name} name of channel
|
||||
{number} number of channel
|
||||
{channelid} id of channel to display channel logo
|
||||
{channellogoexists} true if channel logo exists
|
||||
-->
|
||||
<grid name="channels_hor" x="5%" y="25%" width="10%" height="67%">
|
||||
<area layer="2">
|
||||
<drawimage condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" align="center" valign="center" width="80%" height="80%" />
|
||||
@ -314,10 +236,6 @@
|
||||
</area>
|
||||
</grid>
|
||||
|
||||
<!-- Tokens available in channelgroups
|
||||
{color} alternates grid by grid from true to false
|
||||
{group} name of channel group
|
||||
-->
|
||||
<grid name="channelgroups_hor" x="0" y="25%" width="5%" height="67%">
|
||||
<area layer="2">
|
||||
<drawrectangle condition="{color}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}" />
|
||||
@ -338,16 +256,6 @@
|
||||
</area>
|
||||
</grid>
|
||||
|
||||
<!-- Tokens available in schedules
|
||||
{color} alternates grid by grid from true to false
|
||||
{dummy} true if grid is a dummy grid
|
||||
{timer} true if a timer is set for the according event
|
||||
{switchtimer} true if a switchtimer is set for the according event
|
||||
{title} title of grid
|
||||
{shorttext} shorttext of grid
|
||||
{start} start time in hh:mm
|
||||
{stop} stop time in hh:dd
|
||||
-->
|
||||
<grid name="schedules_hor" x="15%" y="25%" width="85%" height="67%">
|
||||
<area layer="2">
|
||||
<drawrectangle condition="{color}++not{current}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}" />
|
||||
@ -381,9 +289,6 @@
|
||||
</area>
|
||||
</grid>
|
||||
|
||||
<!-- Tokens available in channeljump
|
||||
{channel} current user input for channel jump
|
||||
-->
|
||||
<viewelement name="channeljump">
|
||||
</viewelement>
|
||||
|
||||
|
@ -2,22 +2,26 @@
|
||||
<!DOCTYPE menuplugin SYSTEM "../../../dtd/displaymenuplugin.dtd">
|
||||
|
||||
<menuplugin x="0" y="0" width="100%" height="100%" fadetime="0">
|
||||
<background>
|
||||
<!-- background left Menu -->
|
||||
<background condition="eq({indexweathermenuorientation}, 1)">
|
||||
<area x="0" y="0" width="50%" height="100%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
</area>
|
||||
<!-- background right detail view -->
|
||||
<area x="50%" y="3%" width="50%" height="94%" layer="1">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
</area>
|
||||
</background>
|
||||
<!-- Available Variables header:
|
||||
{title} title of current menu
|
||||
{vdrversion} running VDR Version
|
||||
{hasicon} true if a menu icon is available
|
||||
{icon} path of menu icon
|
||||
-->
|
||||
<background condition="eq({indexweathermenuorientation}, 0)">
|
||||
<area x="0" y="0" width="100%" height="10%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
</area>
|
||||
<area x="5%" y="10%" width="90%" height="72%" layer="1">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
</area>
|
||||
<area x="0" y="82%" width="100%" height="18%" layer="1">
|
||||
<fill color="{clrTransBlack}" />
|
||||
</area>
|
||||
</background>
|
||||
|
||||
<header>
|
||||
<area x="0" y="0" width="50%" height="10%" layer="2">
|
||||
<drawtext condition="not{hasicon}" x="5" width="{areawidth}-10" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
|
||||
@ -38,82 +42,7 @@
|
||||
</area>
|
||||
</colorbuttons>
|
||||
|
||||
<menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="10">
|
||||
<!-- Available Variables:
|
||||
{current}
|
||||
{menuitemtext} "Current Weather", "Next 48 hours" or "Next 7 days"
|
||||
{iscurrent} true if item is "Current Weather"
|
||||
{ishourly} true if item is "Next 48 hours"
|
||||
{isdaily} true if item is "Next 7 days"
|
||||
{city} configured city to display weather for
|
||||
{latitude} latitude
|
||||
{longitude} longitude
|
||||
|
||||
If {iscurrent} is true, the following tokens are set:
|
||||
{timestamp} timestamp in hh:mm dd.mm of current forecast
|
||||
{temperature} current temperature in °C
|
||||
{apparenttemperature} apparent (felt) temperature in °C
|
||||
{summary} short summary of current weather
|
||||
{icon} path to use in <drawimage> to display appropriate weather icon
|
||||
{precipitationintensity} precipitation intensity in l/qm
|
||||
{precipitationprobability} precipitation probability in %
|
||||
{precipitationtype} precipitation type (snow, ...)
|
||||
{humidity} humidity in %
|
||||
{windspeed} wind speed in km/h
|
||||
{windbearing} wind bearing in degrees
|
||||
{windbearingstring} wind bearing as human readable string (e.g NE, NNE, ...)
|
||||
{visibility} visibility in km
|
||||
{cloudcover} cloud cover in %
|
||||
{pressure} pressure in HPa
|
||||
{ozone} Ozone in DU (Dobson Unit)
|
||||
|
||||
If {ishourly} is true, the following tokens are set:
|
||||
{summary} short summary of weather
|
||||
{icon} path to use in <drawimage> to display appropriate weather icon
|
||||
|
||||
{hourly[]} array with up to 48 hourly forecasts
|
||||
{hourly[num]} number of forecast, starting at 1
|
||||
{hourly[timestamp]} timestamp in hh:mm
|
||||
{hourly[temperature]} temperature in °C
|
||||
{hourly[apparenttemperature]} apparent (felt) temperature in °C
|
||||
{hourly[summary]} short summary
|
||||
{hourly[icon]} path to use in <drawimage> to display appropriate weather icon
|
||||
{hourly[precipitationintensity]} precipitation intensity in l/qm
|
||||
{hourly[precipitationprobability]} precipitation probability in %
|
||||
{hourly[precipitationtype]} precipitation type (snow, ...)
|
||||
{hourly[humidity]} humidity in %
|
||||
{hourly[windspeed]} wind speed in km/h
|
||||
{hourly[windbearing]} wind bearing in degrees
|
||||
{hourly[windbearingstring]} wind bearing as human readable string (e.g NE, NNE, ...)
|
||||
{hourly[visibility]} visibility in km
|
||||
{hourly[cloudcover]} cloud cover in %
|
||||
{hourly[pressure]} pressure in HPa
|
||||
{hourly[ozone]} Ozone in DU (Dobson Unit)
|
||||
|
||||
If {isdaily} is true, the following tokens are set:
|
||||
{summary} short summary of weather
|
||||
{icon} path to use in <drawimage> to display appropriate weather icon
|
||||
|
||||
{daily[day]} day of forecast in dd.mm
|
||||
{daily[dayname]} three letter abbrivated day name
|
||||
{daily[temperaturemin]} minimum temperature at this day in °C
|
||||
{daily[temperaturemintime]} time of minimum temperature
|
||||
{daily[temperaturemax]} maximum temperature at this day in °C
|
||||
{daily[temperaturemaxtime]} time of maximum temperature
|
||||
{daily[summary]} short summary
|
||||
{daily[icon]} path to use in <drawimage> to display appropriate weather icon
|
||||
{daily[precipitationintensity]} precipitation intensity in l/qm
|
||||
{daily[precipitationprobability]} precipitation probability in %
|
||||
{daily[precipitationtype]} precipitation type (snow, ...)
|
||||
{daily[humidity]} humidity in %
|
||||
{daily[windspeed]} wind speed in km/h
|
||||
{daily[windbearing]} wind bearing in degrees
|
||||
{daily[windbearingstring]} wind bearing as human readable string (e.g NE, NNE, ...)
|
||||
{daily[visibility]} visibility in km
|
||||
{daily[cloudcover]} cloud cover in %
|
||||
{daily[pressure]} pressure in HPa
|
||||
{daily[ozone]} Ozone in DU (Dobson Unit)
|
||||
-->
|
||||
<menuitems condition="strequal({weathermenuorientation}, 'vertical')" x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="10">
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area x="1%" width="46%" layer="2">
|
||||
@ -124,8 +53,6 @@
|
||||
<drawtext x="10" valign="center" font="{light}" fontsize="95%" color="{clrWhite}" text="{menuitemtext}" />
|
||||
</area>
|
||||
</listelement>
|
||||
<!-- additional element which is drawn for current element -->
|
||||
<!-- All Tokens from listelement are available -->
|
||||
<currentelement delay="100" fadetime="0">
|
||||
<area condition="{iscurrent}" x="51%" y="0" width="48%" height="100%" layer="3">
|
||||
<drawimage name="weathericon" imagetype="icon" path="{icon}" x="2%" y="0" width="{areawidth}*0.3" height="{areawidth}*0.3"/>
|
||||
@ -161,4 +88,50 @@
|
||||
</area>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
<menuitems condition="strequal({weathermenuorientation}, 'horizontal')" x="0" y="10%" orientation="horizontal" width="100%" height="90%" align="center" numlistelements="3">
|
||||
<listelement>
|
||||
<!-- Background -->
|
||||
<area y="80%" height="20%" layer="2">
|
||||
<fill condition="not{current}" color="{clrTransparent}" />
|
||||
<fill condition="{current}" color="{clrTransBlueLight}" />
|
||||
</area>
|
||||
<area y="80%" height="20%" layer="3">
|
||||
<drawtextbox x="0" y="0" width="100%" height="100%" align="center" valign="center" font="{light}" fontsize="40%" color="{clrWhite}" text="{menuitemtext}" />
|
||||
</area>
|
||||
</listelement>
|
||||
<currentelement delay="100" fadetime="0">
|
||||
<area condition="{iscurrent}" x="10%" y="5%" width="80%" height="70%" layer="3">
|
||||
<drawimage name="weathericon" imagetype="icon" path="{icon}" x="2%" y="0" width="{areaheight}*0.4" height="{areaheight}*0.4"/>
|
||||
<drawtext align="right" y="0" font="{semibold}" fontsize="10%" color="{clrWhite}" text="{city}" />
|
||||
<drawtext align="right" y="9%" font="{light}" fontsize="10%" color="{clrWhite}" text="{timestamp}" />
|
||||
<drawtext align="right" y="18%" font="{light}" fontsize="25%" color="{clrWhite}" text="{temperature}°C" />
|
||||
<drawtext align="right" y="40%" font="{light}" fontsize="10%" color="{clrWhite}" text="{summary}" />
|
||||
<drawtext x="0" y="40%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(apparenttemp)}: {apparenttemperature} °C" />
|
||||
<drawtext x="0" y="48%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(precipitationprobability)}: {precipitationprobability} %" />
|
||||
<drawtext x="0" y="56%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(precipitationintensity)}: {precipitationintensity} l/qm" />
|
||||
<drawtext x="0" y="64%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(humidity)}: {humidity} %" />
|
||||
<drawtext x="0" y="72%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(windspeed)}: {windspeed} km/h" />
|
||||
<drawtext x="0" y="80%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(windbearing)}: {windbearingstring} ({windbearing} °)" />
|
||||
<drawtext x="0" y="88%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(cloudcover)}: {cloudcover} %" />
|
||||
</area>
|
||||
<area condition="{ishourly}" x="10%" y="5%" width="80%" height="70%" layer="3">
|
||||
<loop name="hourly" x="0" y="0" orientation="vertical" columnwidth="{areawidth}" rowheight="{areaheight}/12" overflow="cut">
|
||||
<drawtext x="0" font="{semibold}" fontsize="7%" valign="center" color="{clrWhite}" text="{hourly[timestamp]}" />
|
||||
<drawimage imagetype="icon" path="{hourly[icon]}" x="18%" valign="center" width="{rowheight}*0.8" height="{rowheight}*0.8"/>
|
||||
<drawtext x="30%" font="{light}" fontsize="7%" valign="center" color="{clrWhite}" text="{hourly[temperature]}°C" />
|
||||
<drawtext x="48%" font="{light}" fontsize="5%" valign="center" width="52%" color="{clrWhite}" text="{hourly[summary]}" />
|
||||
<drawrectangle x="0" y="{rowheight} - 1" width="{columnwidth}" height="1" color="{clrWhite}" />
|
||||
</loop>
|
||||
</area>
|
||||
<area condition="{isdaily}" x="10%" y="5%" width="80%" height="70%" layer="3">
|
||||
<loop name="daily" x="0" y="0" orientation="vertical" columnwidth="{areawidth}" rowheight="{areaheight}/7" overflow="cut">
|
||||
<drawtext x="0" font="{semibold}" fontsize="{rowheight}/2" y="5" color="{clrWhite}" text="{daily[dayname]} {daily[day]}" />
|
||||
<drawtext x="35%" font="{light}" fontsize="{rowheight}/2" y="5" color="{clrWhite}" text="{daily[temperaturemin]}°C - {daily[temperaturemax]}°C" />
|
||||
<drawtext x="0" font="{light}" fontsize="{rowheight}*0.3" width="{columnwidth} - {rowheight}*0.7" y="{rowheight}*0.6" color="{clrWhite}" text="{daily[summary]}" />
|
||||
<drawimage imagetype="icon" path="{daily[icon]}" x="{columnwidth} - {rowheight}*0.7" valign="center" width="{rowheight}*0.7" height="{rowheight}*0.7"/>
|
||||
<drawrectangle x="0" y="{rowheight} - 1" width="{columnwidth}" height="1" color="{clrWhite}" />
|
||||
</loop>
|
||||
</area>
|
||||
</currentelement>
|
||||
</menuitems>
|
||||
</menuplugin>
|
||||
|
@ -26,37 +26,14 @@
|
||||
</area>
|
||||
</colorbuttons>
|
||||
|
||||
<scrollbar>
|
||||
<scrollbar>
|
||||
<area x="98%" y="20%" width="2%" height="65%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
<drawrectangle x="2" y="2" width="{areawidth} - 4" height="{areaheight} - 4" color="{clrTransparent}" />
|
||||
<drawrectangle x="4" y="4 + {areaheight} * {offset} / 1000" width="{areawidth} - 8" height="{areaheight} * {height} / 1000 - 8" color="{clrWhite}" />
|
||||
</area>
|
||||
</scrollbar>
|
||||
<!-- Available Variables in detailheader and tab:
|
||||
{menuheader} "Current Weather"
|
||||
{city} configured city to display weather for
|
||||
{latitude} latitude
|
||||
{longitude} longitude
|
||||
{timestamp} timestamp in hh:mm dd.mm of current forecast
|
||||
{temperature} current temperature in °C
|
||||
{apparenttemperature} apparent (felt) temperature in °C
|
||||
{temperaturemin} minimum temperature the day in °C
|
||||
{temperaturemax} maximum temperature the day in °C
|
||||
{summary} short summary of current weather
|
||||
{icon} path to use in <drawimage> to display appropriate weather icon
|
||||
{precipitationintensity} precipitation intensity in l/qm
|
||||
{precipitationprobability} precipitation probability in %
|
||||
{precipitationtype} precipitation type (snow, ...)
|
||||
{humidity} humidity in %
|
||||
{windspeed} wind speed in km/h
|
||||
{windbearing} wind bearing in degrees
|
||||
{windbearingstring} wind bearing as human readable string (e.g NE, NNE, ...)
|
||||
{visibility} visibility in km
|
||||
{cloudcover} cloud cover in %
|
||||
{pressure} pressure in HPa
|
||||
{ozone} Ozone in DU (Dobson Unit)
|
||||
-->
|
||||
|
||||
<detailheader>
|
||||
<area x="0" y="0" width="100%" height="20%" layer="2">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
|
@ -26,7 +26,7 @@
|
||||
</area>
|
||||
</colorbuttons>
|
||||
|
||||
<scrollbar>
|
||||
<scrollbar>
|
||||
<area x="98%" y="20%" width="2%" height="65%" layer="3">
|
||||
<fill color="{clrWhite}" />
|
||||
<drawrectangle x="2" y="2" width="{areawidth} - 4" height="{areaheight} - 4" color="{clrTransparent}" />
|
||||
@ -34,34 +34,6 @@
|
||||
</area>
|
||||
</scrollbar>
|
||||
|
||||
<!-- Available Variables in detailheader and tab:
|
||||
{summary} short summary of weather
|
||||
{icon} path to use in <drawimage> to display appropriate weather icon
|
||||
{city} configured city to display weather for
|
||||
{latitude} latitude
|
||||
{longitude} longitude
|
||||
|
||||
{daily[day]} day of forecast in dd.mm
|
||||
{daily[dayname]} three letter abbrivated day name
|
||||
{daily[temperaturemin]} minimum temperature at this day in °C
|
||||
{daily[temperaturemintime]} time of minimum temperature
|
||||
{daily[temperaturemax]} maximum temperature at this day in °C
|
||||
{daily[temperaturemaxtime]} time of maximum temperature
|
||||
{daily[summary]} short summary
|
||||
{daily[icon]} path to use in <drawimage> to display appropriate weather icon
|
||||
{daily[precipitationintensity]} precipitation intensity in l/qm
|
||||
{daily[precipitationprobability]} precipitation probability in %
|
||||
{daily[precipitationtype]} precipitation type (snow, ...)
|
||||
{daily[humidity]} humidity in %
|
||||
{daily[windspeed]} wind speed in km/h
|
||||
{daily[windbearing]} wind bearing in degrees
|
||||
{daily[windbearingstring]} wind bearing as human readable string (e.g NE, NNE, ...)
|
||||
{daily[visibility]} visibility in km
|
||||
{daily[cloudcover]} cloud cover in %
|
||||
{daily[pressure]} pressure in HPa
|
||||
{daily[ozone]} Ozone in DU (Dobson Unit)
|
||||
-->
|
||||
|
||||
<detailheader>
|
||||
<area x="0" y="0" width="100%" height="20%" layer="2">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
|
@ -34,32 +34,6 @@
|
||||
</area>
|
||||
</scrollbar>
|
||||
|
||||
<!-- Available Variables in detailheader and tab:
|
||||
{summary} short summary of weather
|
||||
{icon} path to use in <drawimage> to display appropriate weather icon
|
||||
{city} configured city to display weather for
|
||||
{latitude} latitude
|
||||
{longitude} longitude
|
||||
|
||||
{hourly[]} array with up to 48 hourly forecasts
|
||||
{hourly[num]} number of forecast, starting at 1
|
||||
{hourly[timestamp]} timestamp in hh:mm
|
||||
{hourly[temperature]} temperature in °C
|
||||
{hourly[apparenttemperature]} apparent (felt) temperature in °C
|
||||
{hourly[summary]} short summary
|
||||
{hourly[icon]} path to use in <drawimage> to display appropriate weather icon
|
||||
{hourly[precipitationintensity]} precipitation intensity in l/qm
|
||||
{hourly[precipitationprobability]} precipitation probability in %
|
||||
{hourly[precipitationtype]} precipitation type (snow, ...)
|
||||
{hourly[humidity]} humidity in %
|
||||
{hourly[windspeed]} wind speed in km/h
|
||||
{hourly[windbearing]} wind bearing in degrees
|
||||
{hourly[windbearingstring]} wind bearing as human readable string (e.g NE, NNE, ...)
|
||||
{hourly[visibility]} visibility in km
|
||||
{hourly[cloudcover]} cloud cover in %
|
||||
{hourly[pressure]} pressure in HPa
|
||||
{hourly[ozone]} Ozone in DU (Dobson Unit)
|
||||
-->
|
||||
<detailheader>
|
||||
<area x="0" y="0" width="100%" height="20%" layer="2">
|
||||
<fill color="{clrTransBlueLight}" />
|
||||
|
@ -81,6 +81,15 @@ int cDisplayMenuListView::GetListWidth(void) {
|
||||
return 1920;
|
||||
}
|
||||
|
||||
eMenuOrientation cDisplayMenuListView::MenuOrientation(void) {
|
||||
if (!tmplList) {
|
||||
return moVertical;
|
||||
}
|
||||
eOrientation orientation = tmplList->GetOrientation();
|
||||
if (orientation == orHorizontal)
|
||||
return moHorizontal;
|
||||
return moVertical;
|
||||
}
|
||||
|
||||
void cDisplayMenuListView::Clear(void) {
|
||||
for (int i=0; i<itemCount; i++) {
|
||||
|
@ -26,6 +26,7 @@ public:
|
||||
void SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5);
|
||||
int GetMaxItems(void) { return itemCount; };
|
||||
int GetListWidth(void);
|
||||
eMenuOrientation MenuOrientation(void);
|
||||
void AddDefaultMenuItem(int index, string *tabTexts, bool current, bool selectable);
|
||||
string AddMainMenuItem(int index, const char *itemText, bool current, bool selectable);
|
||||
void AddSetupMenuItem(int index, const char *itemText, bool current, bool selectable);
|
||||
|
@ -226,6 +226,13 @@ void cDisplayMenuRootView::SetSortMode(eMenuSortMode sortMode) {
|
||||
view->SetSortMode(sortMode);
|
||||
}
|
||||
|
||||
eMenuOrientation cDisplayMenuRootView::MenuOrientation(void) {
|
||||
if (!listView) {
|
||||
return moVertical;
|
||||
}
|
||||
return listView->MenuOrientation();
|
||||
}
|
||||
|
||||
void cDisplayMenuRootView::CorrectDefaultMenu(void) {
|
||||
if (viewType > svMenuDefault && viewType != svMenuPlugin) {
|
||||
SetMenu(mcUnknown, true);
|
||||
|
@ -55,6 +55,7 @@ public:
|
||||
void SetMenu(eMenuCategory menuCat, bool menuInit);
|
||||
void SetSelectedPluginMainMenu(string name) { selectedPluginMainMenu = name; };
|
||||
void SetSortMode(eMenuSortMode sortMode);
|
||||
eMenuOrientation MenuOrientation(void);
|
||||
void SetCurrentRecording(string rec) { currentRecording = rec; };
|
||||
void CorrectDefaultMenu(void);
|
||||
void SetPluginMenu(string name, int menu, int type);
|
||||
|
@ -221,6 +221,8 @@ void cDisplayMenuView::DrawScrollbar(int numMax, int numDisplayed, int offset) {
|
||||
|
||||
intTokens.insert(pair<string, int>("height", barHeight));
|
||||
intTokens.insert(pair<string, int>("offset", barOffset));
|
||||
intTokens.insert(pair<string, int>("hasprev", (offset == 0) ? 0 : 1));
|
||||
intTokens.insert(pair<string, int>("hasnext", (offset + numMax == numDisplayed) ? 0 : 1));
|
||||
|
||||
ClearViewElement(veScrollbar);
|
||||
DrawViewElement(veScrollbar, &stringTokens, &intTokens);
|
||||
|
17
views/view.c
17
views/view.c
@ -284,7 +284,6 @@ void cView::DestroyDetachedViewElement(eViewElement ve) {
|
||||
detachedViewElements.erase(hit);
|
||||
}
|
||||
|
||||
|
||||
void cView::ClearAnimations(int cat) {
|
||||
//stop and delete all animated elements from this viewelement
|
||||
if (animations.size() == 0)
|
||||
@ -746,6 +745,7 @@ void cView::DoDrawTextBox(int num, cTemplateFunction *func, int x0, int y0) {
|
||||
string fontName = func->GetFontName();
|
||||
int fontSize = func->GetNumericParameter(ptFontSize);
|
||||
int align = func->GetNumericParameter(ptAlign);
|
||||
int valign = func->GetNumericParameter(ptValign);
|
||||
int maxLines = func->GetNumericParameter(ptMaxLines);
|
||||
tColor clr = func->GetColorParameter(ptColor);
|
||||
tColor clrBack = clrTransparent;
|
||||
@ -759,6 +759,14 @@ void cView::DoDrawTextBox(int num, cTemplateFunction *func, int x0, int y0) {
|
||||
int fontHeight = fontManager->Height(fontName, fontSize);
|
||||
int lines = wrapper.Lines();
|
||||
int yLine = y;
|
||||
|
||||
if (height > 0 && valign == alCenter) {
|
||||
int totalHeight = lines * fontHeight;
|
||||
if (totalHeight < height) {
|
||||
yLine += (height - totalHeight) / 2;
|
||||
}
|
||||
}
|
||||
|
||||
for (int line=0; line < lines; line++) {
|
||||
int xLine = x;
|
||||
if (align == alCenter) {
|
||||
@ -771,15 +779,16 @@ void cView::DoDrawTextBox(int num, cTemplateFunction *func, int x0, int y0) {
|
||||
cPoint pos(xLine, yLine);
|
||||
if (maxLines > 0 && line == maxLines-1) {
|
||||
string lastLine = wrapper.GetLine(line);
|
||||
if (lines > maxLines) {
|
||||
if (lines > maxLines) {
|
||||
lastLine += "...";
|
||||
}
|
||||
DrawText(num, pos, lastLine.c_str(), clr, clrBack, fontName, fontSize);
|
||||
DrawText(num, pos, lastLine.c_str(), clr, clrBack, fontName, fontSize);
|
||||
break;
|
||||
} else if (height > 0 && yLine - y + 2*fontHeight > height) {
|
||||
} else if (line != (lines-1) && height > 0 && yLine - y + 2*fontHeight > height) {
|
||||
DrawText(num, pos, "...", clr, clrBack, fontName, fontSize);
|
||||
break;
|
||||
}
|
||||
esyslog("skindesigner: drawing regular line yLine %d", yLine);
|
||||
DrawText(num, pos, wrapper.GetLine(line), clr, clrBack, fontName, fontSize);
|
||||
yLine += fontHeight;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user