diff options
author | louis <louis.braun@gmx.de> | 2015-08-08 11:04:15 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-08-08 11:04:15 +0200 |
commit | ea758f955655ee48b0c3b0f277c21e8cbc045316 (patch) | |
tree | 1326c86deede899b6d8394c611a09831ff1858fe | |
parent | b5c587b2567e4ac838a33363d02ad228d94b9b14 (diff) | |
download | vdr-plugin-skindesigner-ea758f955655ee48b0c3b0f277c21e8cbc045316.tar.gz vdr-plugin-skindesigner-ea758f955655ee48b0c3b0f277c21e8cbc045316.tar.bz2 |
implemented horizontal menus
54 files changed, 672 insertions, 2210 deletions
@@ -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 @@ -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 diff --git a/displaymenu.c b/displaymenu.c index ea589cb..2e78793 100644 --- a/displaymenu.c +++ b/displaymenu.c @@ -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; diff --git a/displaymenu.h b/displaymenu.h index 5b697b4..5aee6d1 100644 --- a/displaymenu.h +++ b/displaymenu.h @@ -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); diff --git a/dtd/displayaudiotracks.dtd b/dtd/displayaudiotracks.dtd index b4b0c59..e4abd21 100644 --- a/dtd/displayaudiotracks.dtd +++ b/dtd/displayaudiotracks.dtd @@ -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)*>
diff --git a/dtd/displaymenu.dtd b/dtd/displaymenu.dtd index 0569d42..ecbc374 100644 --- a/dtd/displaymenu.dtd +++ b/dtd/displaymenu.dtd @@ -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)*>
diff --git a/dtd/displaymenuplugin.dtd b/dtd/displaymenuplugin.dtd index 1f9560f..168d047 100644 --- a/dtd/displaymenuplugin.dtd +++ b/dtd/displaymenuplugin.dtd @@ -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
diff --git a/dtd/functions.dtd b/dtd/functions.dtd index 85ef1f5..7b08437 100644 --- a/dtd/functions.dtd +++ b/dtd/functions.dtd @@ -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 diff --git a/dtd/setup.dtd b/dtd/setup.dtd index d56fc40..15f1928 100644 --- a/dtd/setup.dtd +++ b/dtd/setup.dtd @@ -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)+>
diff --git a/libcore/skinsetup.c b/libcore/skinsetup.c index e52ff41..c9ae7bd 100644 --- a/libcore/skinsetup.c +++ b/libcore/skinsetup.c @@ -1,6 +1,7 @@ #include "skinsetup.h" #include "../config.h" #include "../libtemplate/xmlparser.h" +#include "../libcore/helpers.h" // --- cSkinSetupParameter ----------------------------------------------------------- @@ -10,7 +11,17 @@ cSkinSetupParameter::cSkinSetupParameter(void) { displayText = ""; min = 0; max = 1000; - value = 0; + value = 0; + options = NULL; + optionsTranslated = NULL; + numOptions = 0; +} + +cSkinSetupParameter::~cSkinSetupParameter(void) { + if (numOptions > 0 && options && optionsTranslated) { + delete[] options; + delete[] optionsTranslated; + } } void cSkinSetupParameter::Debug(void) { @@ -19,9 +30,16 @@ void cSkinSetupParameter::Debug(void) { sType = "bool"; else if (type == sptInt) sType = "int"; - dsyslog("skindesigner: name \"%s\", type %s, displayText \"%s\", Value %d", name.c_str(), sType.c_str(), displayText.c_str(), value); + else if (type == sptString) + sType = "string"; + dsyslog("skindesigner: name \"%s\", type %s, displayText \"%s\", Value: %d", name.c_str(), sType.c_str(), displayText.c_str(), value); if (type == sptInt) dsyslog("skindesigner: min %d, max %d", min, max); + if (type == sptString && options) { + for (int i=0; i < numOptions; i++) { + dsyslog("skindesigner: option %d: %s, translated: %s", i+1, options[i], optionsTranslated[i]); + } + } } // --- cSkinSetupMenu ----------------------------------------------------------- @@ -88,7 +106,7 @@ void cSkinSetupMenu::InitIterators(void) { subMenuIt = subMenus.begin(); } -void cSkinSetupMenu::SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value) { +void cSkinSetupMenu::SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value, string options) { cSkinSetupParameter *param = new cSkinSetupParameter(); param->type = paramType; param->name = name; @@ -100,8 +118,26 @@ void cSkinSetupMenu::SetParameter(eSetupParameterType paramType, string name, st if (max.size() && paramType == sptInt) { param->max = atoi(max.c_str()); } + param->value = atoi(value.c_str()); + if (paramType == sptString) { + splitstring o(options.c_str()); + vector<string> opts = o.split(',', 1); + int numOpts = opts.size(); + if (numOpts > 0) { + param->numOptions = numOpts; + param->options = new const char*[numOpts]; + int i=0; + for (vector<string>::iterator it = opts.begin(); it != opts.end(); it++) { + string option = trim(*it); + char *s = new char[option.size()]; + strcpy(s, option.c_str()); + param->options[i++] = s; + } + } + } + parameters.push_back(param); } @@ -185,7 +221,7 @@ void cSkinSetup::SubMenuDone(void) { } } -void cSkinSetup::SetParameter(string type, string name, string displayText, string min, string max, string value) { +void cSkinSetup::SetParameter(string type, string name, string displayText, string min, string max, string value, string options) { if (!type.size() || !name.size() || !displayText.size() || !value.size()) { esyslog("skindesigner: invalid setup parameter for skin %s", skin.c_str()); return; @@ -195,12 +231,14 @@ void cSkinSetup::SetParameter(string type, string name, string displayText, stri paramType = sptInt; } else if (!type.compare("bool")) { paramType = sptBool; + } else if (!type.compare("string")) { + paramType = sptString; } if (paramType == sptUnknown) { esyslog("skindesigner: invalid setup parameter for skin %s", skin.c_str()); return; } - currentMenu->SetParameter(paramType, name, displayText, min, max, value); + currentMenu->SetParameter(paramType, name, displayText, min, max, value, options); } cSkinSetupParameter *cSkinSetup::GetNextParameter(void) { @@ -221,7 +259,14 @@ void cSkinSetup::AddToGlobals(cGlobals *globals) { rootMenu->InitIterators(); cSkinSetupParameter *param = NULL; while (param = rootMenu->GetNextParameter()) { - globals->AddInt(param->name, param->value); + if (param->type == sptString) { + string value = param->options[param->value]; + globals->AddString(param->name, value); + string intName = "index" + param->name; + globals->AddInt(intName, param->value); + } else { + globals->AddInt(param->name, param->value); + } } } @@ -233,6 +278,23 @@ void cSkinSetup::TranslateSetup(void) { if (Translate(param->displayText, transl)) { param->displayText = transl; } + if (param->type == sptString && param->numOptions > 0) { + param->optionsTranslated = new const char*[param->numOptions]; + for (int i = 0; i < param->numOptions; i++) { + string option = param->options[i]; + string optionTransToken = "{tr(" + option + ")}"; + string optionTranslated = ""; + if (Translate(optionTransToken, optionTranslated)) { + char *s = new char[optionTranslated.size()]; + strcpy(s, optionTranslated.c_str()); + param->optionsTranslated[i] = s; + } else { + char *s = new char[option.size()]; + strcpy(s, option.c_str()); + param->optionsTranslated[i] = s; + } + } + } } rootMenu->InitIterators(); diff --git a/libcore/skinsetup.h b/libcore/skinsetup.h index 29649ed..a664ebc 100644 --- a/libcore/skinsetup.h +++ b/libcore/skinsetup.h @@ -15,6 +15,7 @@ using namespace std; enum eSetupParameterType { sptInt, sptBool, + sptString, sptUnknown }; @@ -24,13 +25,16 @@ class cSkinSetupParameter { private: public: cSkinSetupParameter(void); - virtual ~cSkinSetupParameter(void) {}; + virtual ~cSkinSetupParameter(void); eSetupParameterType type; string name; string displayText; int min; int max; - int value; + int value; + const char* *options; + const char* *optionsTranslated; + int numOptions; void Debug(void); }; @@ -55,7 +59,7 @@ public: void SetParent(cSkinSetupMenu *p) { parent = p; }; cSkinSetupMenu *GetParent(void) { return parent; }; void AddSubMenu(cSkinSetupMenu *sub) { subMenus.push_back(sub); }; - void SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value); + void SetParameter(eSetupParameterType paramType, string name, string displayText, string min, string max, string value, string options); void InitIterators(void); void InitParameterIterator(void) { paramIt = parameters.begin(); }; cSkinSetupParameter *GetNextParameter(bool deep = true); @@ -82,7 +86,7 @@ public: bool ReadFromXML(void); void SetSubMenu(string name, string displayText); void SubMenuDone(void); - void SetParameter(string type, string name, string displayText, string min, string max, string value); + void SetParameter(string type, string name, string displayText, string min, string max, string value, string options); void InitParameterIterator(void) { rootMenu->InitIterators(); }; cSkinSetupParameter *GetNextParameter(void); cSkinSetupParameter *GetParameter(string name); diff --git a/libtemplate/globals.c b/libtemplate/globals.c index 822b993..3fd0705 100644 --- a/libtemplate/globals.c +++ b/libtemplate/globals.c @@ -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)); diff --git a/libtemplate/globals.h b/libtemplate/globals.h index d566fac..12ee917 100644 --- a/libtemplate/globals.h +++ b/libtemplate/globals.h @@ -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); diff --git a/libtemplate/parameter.c b/libtemplate/parameter.c index 21e02e1..d76cb35 100644 --- a/libtemplate/parameter.c +++ b/libtemplate/parameter.c @@ -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()); } }
\ No newline at end of file diff --git a/libtemplate/templateview.c b/libtemplate/templateview.c index fcedee8..78d6fdf 100644 --- a/libtemplate/templateview.c +++ b/libtemplate/templateview.c @@ -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) { diff --git a/libtemplate/templateview.h b/libtemplate/templateview.h index 726ce68..1713cdc 100644 --- a/libtemplate/templateview.h +++ b/libtemplate/templateview.h @@ -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); }; diff --git a/libtemplate/templateviewelement.c b/libtemplate/templateviewelement.c index 0171bdb..56672b8 100644 --- a/libtemplate/templateviewelement.c +++ b/libtemplate/templateviewelement.c @@ -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();
}
diff --git a/libtemplate/templateviewelement.h b/libtemplate/templateviewelement.h index 32f2ecc..189e9e5 100644 --- a/libtemplate/templateviewelement.h +++ b/libtemplate/templateviewelement.h @@ -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);
diff --git a/libtemplate/templateviewlist.c b/libtemplate/templateviewlist.c index 1d5dabe..a831d2d 100644 --- a/libtemplate/templateviewlist.c +++ b/libtemplate/templateviewlist.c @@ -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;
diff --git a/libtemplate/templateviewlist.h b/libtemplate/templateviewlist.h index 5806745..4cc4ccb 100644 --- a/libtemplate/templateviewlist.h +++ b/libtemplate/templateviewlist.h @@ -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); diff --git a/libtemplate/xmlparser.c b/libtemplate/xmlparser.c index ce41918..ba5684e 100644 --- a/libtemplate/xmlparser.c +++ b/libtemplate/xmlparser.c @@ -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) { diff --git a/patches/vdr-2.2.0_horizontal_menu.patch b/patches/vdr-2.2.0_horizontal_menu.patch new file mode 100644 index 0000000..a7fae81 --- /dev/null +++ b/patches/vdr-2.2.0_horizontal_menu.patch @@ -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 @@ -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)); } } diff --git a/skins/metrixhd/setup.xml b/skins/metrixhd/setup.xml index 4ed34b8..ad1d246 100644 --- a/skins/metrixhd/setup.xml +++ b/skins/metrixhd/setup.xml @@ -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> diff --git a/skins/metrixhd/xmlfiles/displayaudiotracks.xml b/skins/metrixhd/xmlfiles/displayaudiotracks.xml index 8c5af98..def251b 100644 --- a/skins/metrixhd/xmlfiles/displayaudiotracks.xml +++ b/skins/metrixhd/xmlfiles/displayaudiotracks.xml @@ -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"> diff --git a/skins/metrixhd/xmlfiles/displaychannel.xml b/skins/metrixhd/xmlfiles/displaychannel.xml index 13b9c07..9817b9d 100644 --- a/skins/metrixhd/xmlfiles/displaychannel.xml +++ b/skins/metrixhd/xmlfiles/displaychannel.xml @@ -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> diff --git a/skins/metrixhd/xmlfiles/displaymenu.xml b/skins/metrixhd/xmlfiles/displaymenu.xml index 1389bef..53b70fb 100644 --- a/skins/metrixhd/xmlfiles/displaymenu.xml +++ b/skins/metrixhd/xmlfiles/displaymenu.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/displaymenuchannels.xml b/skins/metrixhd/xmlfiles/displaymenuchannels.xml index 3e6f771..5b3a184 100644 --- a/skins/metrixhd/xmlfiles/displaymenuchannels.xml +++ b/skins/metrixhd/xmlfiles/displaymenuchannels.xml @@ -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>
\ No newline at end of file +</menuchannels> diff --git a/skins/metrixhd/xmlfiles/displaymenudefault.xml b/skins/metrixhd/xmlfiles/displaymenudefault.xml index d3f56c1..de4b49a 100644 --- a/skins/metrixhd/xmlfiles/displaymenudefault.xml +++ b/skins/metrixhd/xmlfiles/displaymenudefault.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/displaymenudetailepg.xml b/skins/metrixhd/xmlfiles/displaymenudetailepg.xml index 39bd991..0f5c224 100644 --- a/skins/metrixhd/xmlfiles/displaymenudetailepg.xml +++ b/skins/metrixhd/xmlfiles/displaymenudetailepg.xml @@ -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>
\ No newline at end of file +</menudetailedepg> diff --git a/skins/metrixhd/xmlfiles/displaymenudetailrecording.xml b/skins/metrixhd/xmlfiles/displaymenudetailrecording.xml index 47f096d..dfcd5ac 100644 --- a/skins/metrixhd/xmlfiles/displaymenudetailrecording.xml +++ b/skins/metrixhd/xmlfiles/displaymenudetailrecording.xml @@ -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"> diff --git a/skins/metrixhd/xmlfiles/displaymenudetailtext.xml b/skins/metrixhd/xmlfiles/displaymenudetailtext.xml index 5fd8997..59cda9b 100644 --- a/skins/metrixhd/xmlfiles/displaymenudetailtext.xml +++ b/skins/metrixhd/xmlfiles/displaymenudetailtext.xml @@ -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>
\ No newline at end of file +</menudetailedtext> diff --git a/skins/metrixhd/xmlfiles/displaymenumain.xml b/skins/metrixhd/xmlfiles/displaymenumain.xml index 775b435..7bd8e33 100644 --- a/skins/metrixhd/xmlfiles/displaymenumain.xml +++ b/skins/metrixhd/xmlfiles/displaymenumain.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/displaymenurecordings.xml b/skins/metrixhd/xmlfiles/displaymenurecordings.xml index 6e8f527..9cef713 100644 --- a/skins/metrixhd/xmlfiles/displaymenurecordings.xml +++ b/skins/metrixhd/xmlfiles/displaymenurecordings.xml @@ -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>
\ No newline at end of file + + <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> diff --git a/skins/metrixhd/xmlfiles/displaymenuschedules.xml b/skins/metrixhd/xmlfiles/displaymenuschedules.xml index d1f0428..b32ea99 100644 --- a/skins/metrixhd/xmlfiles/displaymenuschedules.xml +++ b/skins/metrixhd/xmlfiles/displaymenuschedules.xml @@ -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>
\ No newline at end of file +</menuschedules> diff --git a/skins/metrixhd/xmlfiles/displaymenusetup.xml b/skins/metrixhd/xmlfiles/displaymenusetup.xml index d2fc400..4e2ae0f 100644 --- a/skins/metrixhd/xmlfiles/displaymenusetup.xml +++ b/skins/metrixhd/xmlfiles/displaymenusetup.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/displaymenutimers.xml b/skins/metrixhd/xmlfiles/displaymenutimers.xml index 5eb453f..b9be696 100644 --- a/skins/metrixhd/xmlfiles/displaymenutimers.xml +++ b/skins/metrixhd/xmlfiles/displaymenutimers.xml @@ -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>
\ No newline at end of file +</menutimers> diff --git a/skins/metrixhd/xmlfiles/displaymessage.xml b/skins/metrixhd/xmlfiles/displaymessage.xml index 3a398bf..1ab2bd5 100644 --- a/skins/metrixhd/xmlfiles/displaymessage.xml +++ b/skins/metrixhd/xmlfiles/displaymessage.xml @@ -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}" />
diff --git a/skins/metrixhd/xmlfiles/displayreplay.xml b/skins/metrixhd/xmlfiles/displayreplay.xml index 6993f9a..d2fa71b 100644 --- a/skins/metrixhd/xmlfiles/displayreplay.xml +++ b/skins/metrixhd/xmlfiles/displayreplay.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/displayvolume.xml b/skins/metrixhd/xmlfiles/displayvolume.xml index f33f653..db78bde 100644 --- a/skins/metrixhd/xmlfiles/displayvolume.xml +++ b/skins/metrixhd/xmlfiles/displayvolume.xml @@ -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}%" /> diff --git a/skins/metrixhd/xmlfiles/plug-setup-skinpreview.xml b/skins/metrixhd/xmlfiles/plug-setup-skinpreview.xml index 32115e3..8642626 100644 --- a/skins/metrixhd/xmlfiles/plug-setup-skinpreview.xml +++ b/skins/metrixhd/xmlfiles/plug-setup-skinpreview.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml b/skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml index ef8403d..e6ab374 100644 --- a/skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml +++ b/skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml @@ -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"> diff --git a/skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml b/skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml index d2f3174..058f1f5 100644 --- a/skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml +++ b/skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml @@ -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"/> diff --git a/skins/metrixhd/xmlfiles/plug-tvguideng-root.xml b/skins/metrixhd/xmlfiles/plug-tvguideng-root.xml index 3a909f2..442c921 100644 --- a/skins/metrixhd/xmlfiles/plug-tvguideng-root.xml +++ b/skins/metrixhd/xmlfiles/plug-tvguideng-root.xml @@ -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> diff --git a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecast.xml b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecast.xml index e4f4960..08b85ab 100644 --- a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecast.xml +++ b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecast.xml @@ -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> diff --git a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailcurrent.xml b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailcurrent.xml index 4932759..365abf7 100644 --- a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailcurrent.xml +++ b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailcurrent.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetaildaily.xml b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetaildaily.xml index 10b588c..802fa90 100644 --- a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetaildaily.xml +++ b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetaildaily.xml @@ -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}" /> diff --git a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailhourly.xml b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailhourly.xml index c21c62a..86670fa 100644 --- a/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailhourly.xml +++ b/skins/metrixhd/xmlfiles/plug-weatherforecast-weatherforecastdetailhourly.xml @@ -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}" /> diff --git a/views/displaymenulistview.c b/views/displaymenulistview.c index 29927b2..b96bdc2 100644 --- a/views/displaymenulistview.c +++ b/views/displaymenulistview.c @@ -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++) {
diff --git a/views/displaymenulistview.h b/views/displaymenulistview.h index c7aba12..3acba56 100644 --- a/views/displaymenulistview.h +++ b/views/displaymenulistview.h @@ -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); diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c index bf3981f..2d4e457 100644 --- a/views/displaymenurootview.c +++ b/views/displaymenurootview.c @@ -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); diff --git a/views/displaymenurootview.h b/views/displaymenurootview.h index cec7708..294b6ee 100644 --- a/views/displaymenurootview.h +++ b/views/displaymenurootview.h @@ -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); diff --git a/views/displaymenuview.c b/views/displaymenuview.c index 9f732e2..53ab558 100644 --- a/views/displaymenuview.c +++ b/views/displaymenuview.c @@ -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); diff --git a/views/view.c b/views/view.c index ad1635c..c2cfea9 100644 --- a/views/view.c +++ b/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;
}
|