summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY5
-rw-r--r--Makefile1
-rw-r--r--config.c23
-rw-r--r--config.h4
-rw-r--r--designer.c18
-rw-r--r--designer.h2
-rw-r--r--displaymenu.c5
-rw-r--r--displayplugin.c123
-rw-r--r--displayplugin.h16
-rw-r--r--dtd/displayplugin.dtd26
-rw-r--r--dtd/functions.dtd22
-rw-r--r--libcore/cairoimage.c92
-rw-r--r--libcore/cairoimage.h26
-rw-r--r--libcore/imagecache.c31
-rw-r--r--libcore/imagecache.h3
-rw-r--r--libcore/pixmapcontainer.c45
-rw-r--r--libcore/pixmapcontainer.h5
-rw-r--r--libskindesigner/osdelements.c203
-rw-r--r--libskindesigner/osdelements.h91
-rw-r--r--libskindesigner/services.h131
-rw-r--r--libskindesigner/skindesignerosdbase.c (renamed from skindesclient-0.0.1/libskindesigner/skindesignerosdbase.c)37
-rw-r--r--libskindesigner/skindesignerosdbase.h (renamed from skindesclient-0.0.1/libskindesigner/skindesignerosdbase.h)24
-rw-r--r--libtemplate/template.c36
-rw-r--r--libtemplate/template.h2
-rw-r--r--libtemplate/templatefunction.c7
-rw-r--r--libtemplate/templatefunction.h3
-rw-r--r--libtemplate/templatepixmap.c2
-rw-r--r--libtemplate/templateview.c65
-rw-r--r--libtemplate/templateview.h4
-rw-r--r--libtemplate/templateviewelement.h6
-rw-r--r--libtemplate/xmlparser.c2
-rw-r--r--services.h17
-rw-r--r--skindesclient-0.0.1/COPYING340
-rw-r--r--skindesclient-0.0.1/Makefile123
-rw-r--r--skindesclient-0.0.1/README16
-rw-r--r--skindesclient-0.0.1/libskindesigner/services.h52
-rw-r--r--skindesclient-0.0.1/osdmenu.c148
-rw-r--r--skindesclient-0.0.1/skindesclient.c147
-rw-r--r--skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menudetail.xml80
-rw-r--r--skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistmain.xml67
-rw-r--r--skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistsub.xml67
-rw-r--r--skindesigner.c6
-rw-r--r--skins/blackhole/themes/default/icons/ico_activetimer.pngbin0 -> 1731 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_arrow_left.pngbin0 -> 1136 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_arrow_right.pngbin0 -> 936 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_delete_active.pngbin0 -> 768 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_delete_inactive.pngbin0 -> 886 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_edit_active.pngbin0 -> 2599 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_edit_inactive.pngbin0 -> 2009 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_info_active.pngbin0 -> 2421 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_info_inactive.pngbin0 -> 1859 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_no.pngbin0 -> 1627 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_record_active.pngbin0 -> 6736 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_record_inactive.pngbin0 -> 3859 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_search_active.pngbin0 -> 3426 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_search_inactive.pngbin0 -> 2977 bytes
-rw-r--r--skins/blackhole/themes/default/icons/ico_switchtimer.svg162
-rw-r--r--skins/blackhole/themes/default/icons/ico_yes.pngbin0 -> 2655 bytes
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_grid_active_hor.svg193
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_grid_active_ver.svg193
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_grid_bright_hor.svg184
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_grid_bright_ver.svg185
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_grid_dark_hor.svg184
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_grid_dark_ver.svg185
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_hor.svg185
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_ver.svg186
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_hor.svg209
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_ver.svg209
-rw-r--r--skins/blackhole/themes/default/skinparts/tvguideheader.svg171
-rw-r--r--skins/blackhole/themes/default/theme.xml2
-rw-r--r--skins/blackhole/xmlfiles/plug-tvguideng-detail.xml449
-rw-r--r--skins/blackhole/xmlfiles/plug-tvguideng-recmenu.xml454
-rw-r--r--skins/blackhole/xmlfiles/plug-tvguideng-root.xml381
-rw-r--r--skins/metrixhd/themes/default/icons/ico_switchtimer.svg76
-rw-r--r--skins/metrixhd/themes/default/theme.xml2
-rw-r--r--skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml365
-rw-r--r--skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml452
-rw-r--r--skins/metrixhd/xmlfiles/plug-tvguideng-root.xml317
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_arrow_left.pngbin0 -> 1136 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_arrow_right.pngbin0 -> 936 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_delete_active.pngbin0 -> 768 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_delete_inactive.pngbin0 -> 886 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_edit_active.pngbin0 -> 2599 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_edit_inactive.pngbin0 -> 2009 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_info_active.pngbin0 -> 2421 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_info_inactive.pngbin0 -> 1859 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_rec_on.svg81
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_record_active.pngbin0 -> 6736 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_record_inactive.pngbin0 -> 3859 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_search_active.pngbin0 -> 3426 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_search_inactive.pngbin0 -> 2977 bytes
-rw-r--r--skins/nopacity/themes/darkred/icons/ico_switchtimer.svg93
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_button.pngbin0 -> 103047 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_button_active.pngbin0 -> 99939 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_bottom.pngbin0 -> 2292 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_head.pngbin0 -> 2288 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_horizontal.pngbin0 -> 31050 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_left.pngbin0 -> 1998 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_right.pngbin0 -> 1861 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_vertical.pngbin0 -> 14472 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_horizontal.pngbin0 -> 16307 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_vertical.pngbin0 -> 26057 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_clock.pngbin0 -> 5976 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_date_vertical.pngbin0 -> 19803 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_bottom.pngbin0 -> 2642 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_head.pngbin0 -> 2684 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_horizontal.pngbin0 -> 30601 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_left.pngbin0 -> 2328 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_right.pngbin0 -> 2208 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_vertical.pngbin0 -> 97490 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_bottom.pngbin0 -> 4170 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_head.pngbin0 -> 3852 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_horizontal.pngbin0 -> 32326 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_left.pngbin0 -> 2301 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_right.pngbin0 -> 2182 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_grid_vertical.pngbin0 -> 98957 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_header.pngbin0 -> 195867 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_horizontal.pngbin0 -> 21401 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_vertical.pngbin0 -> 17650 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_horizontal.pngbin0 -> 20310 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_vertical.pngbin0 -> 17751 bytes
-rw-r--r--skins/nopacity/themes/darkred/skinparts/tvguide_tvframe.pngbin0 -> 57079 bytes
-rw-r--r--skins/nopacity/themes/darkred/theme.xml1
-rw-r--r--skins/nopacity/themes/default/icons/ico_arrow_left.pngbin0 -> 1136 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_arrow_right.pngbin0 -> 936 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_delete_active.pngbin0 -> 768 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_delete_inactive.pngbin0 -> 886 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_edit_active.pngbin0 -> 2599 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_edit_inactive.pngbin0 -> 2009 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_info_active.pngbin0 -> 2421 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_info_inactive.pngbin0 -> 1859 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_no.pngbin0 -> 1627 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_rec_on.svg81
-rw-r--r--skins/nopacity/themes/default/icons/ico_record_active.pngbin0 -> 6736 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_record_inactive.pngbin0 -> 3859 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_search_active.pngbin0 -> 3426 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_search_inactive.pngbin0 -> 2977 bytes
-rw-r--r--skins/nopacity/themes/default/icons/ico_switchtimer.svg93
-rw-r--r--skins/nopacity/themes/default/icons/ico_yes.pngbin0 -> 2655 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_button.pngbin0 -> 105355 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_button_active.pngbin0 -> 105357 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channelgroup_bottom.pngbin0 -> 1877 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channelgroup_head.pngbin0 -> 1836 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channelgroup_horizontal.pngbin0 -> 31893 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channelgroup_left.pngbin0 -> 1942 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channelgroup_right.pngbin0 -> 1789 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channelgroup_vertical.pngbin0 -> 16921 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channellogoback_horizontal.pngbin0 -> 17836 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_channellogoback_vertical.pngbin0 -> 28204 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_clock.pngbin0 -> 6001 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_date_vertical.pngbin0 -> 19803 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_active_bottom.pngbin0 -> 3289 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_active_head.pngbin0 -> 3424 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_active_horizontal.pngbin0 -> 33656 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_active_left.pngbin0 -> 2524 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_active_right.pngbin0 -> 2527 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_active_vertical.pngbin0 -> 100607 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_bottom.pngbin0 -> 2863 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_head.pngbin0 -> 2800 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_horizontal.pngbin0 -> 33304 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_left.pngbin0 -> 2462 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_right.pngbin0 -> 2389 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_grid_vertical.pngbin0 -> 100766 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_header.pngbin0 -> 212247 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_timelinebright_horizontal.pngbin0 -> 21401 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_timelinebright_vertical.pngbin0 -> 17751 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_timelinedark_horizontal.pngbin0 -> 20310 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_timelinedark_vertical.pngbin0 -> 17650 bytes
-rw-r--r--skins/nopacity/themes/default/skinparts/tvguide_tvframe.pngbin0 -> 57459 bytes
-rw-r--r--skins/nopacity/themes/default/theme.xml1
-rw-r--r--skins/nopacity/xmlfiles/plug-tvguideng-detail.xml386
-rw-r--r--skins/nopacity/xmlfiles/plug-tvguideng-recmenu.xml468
-rw-r--r--skins/nopacity/xmlfiles/plug-tvguideng-root.xml371
-rw-r--r--views/displaymessageview.c3
-rw-r--r--views/displaypluginview.c207
-rw-r--r--views/displaypluginview.h33
-rw-r--r--views/view.c104
-rw-r--r--views/view.h3
-rw-r--r--views/viewgrid.c31
-rw-r--r--views/viewgrid.h2
180 files changed, 7675 insertions, 1150 deletions
diff --git a/HISTORY b/HISTORY
index fe62c28..e4b78ca 100644
--- a/HISTORY
+++ b/HISTORY
@@ -202,4 +202,9 @@ Version 0.2.2
- added replay onpause view in blackhole skin
- implemented SetTitle() in displayreplay
- fixed header icon for plugin menus
+- added function "drawtextvertical"
+- implemented advanced plugin interface
+- added tvguideng templates for all skins
+
+Version 0.3.0
diff --git a/Makefile b/Makefile
index 686a2d5..2533983 100644
--- a/Makefile
+++ b/Makefile
@@ -66,6 +66,7 @@ OBJS = $(PLUGIN).o \
displaytracks.o \
displayvolume.o \
displayplugin.o \
+ libcore/cairoimage.o \
libcore/pixmapcontainer.o \
libcore/fontmanager.o \
libcore/imagecache.o \
diff --git a/config.c b/config.c
index b667876..0797991 100644
--- a/config.c
+++ b/config.c
@@ -293,10 +293,12 @@ void cDesignerConfig::AddPluginMenus(string name, map< int, string > menus) {
}
void cDesignerConfig::AddPluginViews(string name,
- map< int, string > views,
+ map< int, string > views,
+ multimap< int, pair <int, string> > subViews,
map< int, map <int, string> > viewElements,
map< int, map <int, string> > viewGrids) {
pluginViews.insert(pair< string, map < int, string > >(name, views));
+ pluginSubViews.insert(pair< string, multimap< int, pair <int, string> > >(name, subViews));
pluginViewElements.insert(pair< string, map< int, map <int, string> > >(name, viewElements));
pluginViewGrids.insert(pair< string, map< int, map <int, string> > >(name, viewGrids));
}
@@ -327,6 +329,25 @@ map <int,string> *cDesignerConfig::GetPluginViews(string &name) {
return views;
}
+map <int,string> cDesignerConfig::GetPluginSubViews(string name, int viewID) {
+ map <int,string> subViews;
+
+ map < string, multimap< int, pair <int, string> > >::iterator hit = pluginSubViews.find(name);
+ if (hit == pluginSubViews.end())
+ return subViews;
+
+ multimap< int, pair<int, string> > subs = hit->second;
+
+ pair < multimap< int, pair<int, string> >::iterator, multimap< int, pair<int, string> >::iterator> viewSubViews;
+ viewSubViews = subs.equal_range(viewID);
+
+ for (multimap< int, pair<int, string> >::iterator it=viewSubViews.first; it!=viewSubViews.second; ++it) {
+ pair<int, string> subViewFound = it->second;
+ subViews.insert(pair<int,string>(subViewFound.first, subViewFound.second));
+ }
+ return subViews;
+}
+
int cDesignerConfig::GetPluginViewElementID(string pluginName, string viewElementName, int viewID) {
map < string, map< int, map <int, string> > >::iterator hit = pluginViewElements.find(pluginName);
if (hit == pluginViewElements.end())
diff --git a/config.h b/config.h
index a3613f3..41f900e 100644
--- a/config.h
+++ b/config.h
@@ -32,6 +32,7 @@ private:
map < string, map < int, string > >::iterator plugMenuIt;
map < string, map < int, string > > pluginViews;
map < string, map < int, string > >::iterator plugViewIt;
+ map < string, multimap< int, pair <int, string> > > pluginSubViews;
map < string, map< int, map <int, string> > > pluginViewElements;
map < string, map< int, map <int, string> > > pluginViewGrids;
map < string, cSkinSetup* > skinSetups;
@@ -72,11 +73,12 @@ public:
bool OsdLanguageChanged(void);
cString GetSkinRessourcePath(void);
void AddPluginMenus(string name, map< int, string > menus);
- void AddPluginViews(string name, map< int, string > views, map< int, map <int, string> > viewElements, map< int, map <int, string> > viewGrids);
+ void AddPluginViews(string name, map< int, string > views, multimap< int, pair <int, string> > subViews, map< int, map <int, string> > viewElements, map< int, map <int, string> > viewGrids);
void InitPluginMenuIterator(void);
map <int,string> *GetPluginTemplates(string &name);
void InitPluginViewIterator(void);
map <int,string> *GetPluginViews(string &name);
+ map <int,string> GetPluginSubViews(string name, int viewID);
int GetPluginViewElementID(string pluginName, string viewElementName, int viewID);
int GetPluginViewGridID(string pluginName, string viewGridName, int viewID);
cString skinPath;
diff --git a/designer.c b/designer.c
index 45797d8..93b5b34 100644
--- a/designer.c
+++ b/designer.c
@@ -107,7 +107,7 @@ cSkinDisplayMessage *cSkinDesigner::DisplayMessage(void) {
return displayMessage;
}
-cSkinDisplayPlugin *cSkinDesigner::DisplayPlugin(string pluginName, int viewID) {
+cSkinDisplayPlugin *cSkinDesigner::DisplayPlugin(string pluginName, int viewID, int subViewID) {
currentMenu = NULL;
if (useBackupSkin)
return NULL;
@@ -119,7 +119,7 @@ cSkinDisplayPlugin *cSkinDesigner::DisplayPlugin(string pluginName, int viewID)
map <int, cTemplate*>::iterator hit2 = (hit->second).find(viewID);
if (hit2 == (hit->second).end())
return NULL;
- return new cSkinDisplayPlugin(hit2->second);
+ return new cSkinDisplayPlugin(hit2->second, subViewID);
}
@@ -344,15 +344,23 @@ bool cSkinDesigner::LoadTemplates(void) {
string plugName;
while ( plugViews = config.GetPluginViews(plugName) ) {
for (map <int,string>::iterator v = plugViews->begin(); v != plugViews->end(); v++) {
+ int viewID = v->first;
stringstream templateName;
templateName << "plug-" << plugName << "-" << v->second.c_str();
- cTemplate *plgTemplate = new cTemplate(vtDisplayPlugin, plugName, v->first);
+ cTemplate *plgTemplate = new cTemplate(vtDisplayPlugin, plugName, viewID);
plgTemplate->SetGlobals(globals);
ok = plgTemplate->ReadFromXML(templateName.str());
if (!ok) {
esyslog("skindesigner: error reading plugin %s template", plugName.c_str());
- DeleteTemplates();
- return false;
+ delete plgTemplate;
+ pluginTemplates.erase(plugName);
+ break;
+ }
+ ok = plgTemplate->SetSubViews(plugName, viewID);
+ if (!ok) {
+ delete plgTemplate;
+ pluginTemplates.erase(plugName);
+ break;
}
plgTemplate->Translate();
map< string, map <int, cTemplate*> >::iterator hit = pluginTemplates.find(plugName);
diff --git a/designer.h b/designer.h
index 20abcb6..8541ad7 100644
--- a/designer.h
+++ b/designer.h
@@ -43,7 +43,7 @@ public:
virtual cSkinDisplayVolume *DisplayVolume(void);
virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks);
virtual cSkinDisplayMessage *DisplayMessage(void);
- virtual cSkinDisplayPlugin *DisplayPlugin(string pluginName, int viewID);
+ virtual cSkinDisplayPlugin *DisplayPlugin(string pluginName, int viewID, int subViewID);
void ActivateBackupSkin(void) { useBackupSkin = true; };
void Reload(void);
void ListAvailableFonts(void);
diff --git a/displaymenu.c b/displaymenu.c
index d64e920..9cfe2b7 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -11,7 +11,7 @@ cSDDisplayMenu::cSDDisplayMenu(cTemplate *menuTemplate) {
pluginMenuType = mtUnknown;
if (!menuTemplate) {
doOutput = false;
- esyslog("skindesigner: displayMenu no valid template - aborting");
+ dsyslog("skindesigner: displayMenu no valid template - aborting");
return;
}
rootView = new cDisplayMenuRootView(menuTemplate->GetRootView());
@@ -19,7 +19,6 @@ cSDDisplayMenu::cSDDisplayMenu(cTemplate *menuTemplate) {
doOutput = false;
return;
}
- esyslog("skindesigner: menu opened");
}
cSDDisplayMenu::~cSDDisplayMenu() {
@@ -27,7 +26,6 @@ cSDDisplayMenu::~cSDDisplayMenu() {
delete rootView;
if (textAreaFont)
delete textAreaFont;
- esyslog("skindesigner: menu closed");
}
void cSDDisplayMenu::Scroll(bool Up, bool Page) {
@@ -186,7 +184,6 @@ bool cSDDisplayMenu::SetItemPlugin(map<string,string> *stringTokens, map<string,
}
void cSDDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
- esyslog("skindesigner: Item %s %s", Text, Current ? " -- ACTIVE --" : "");
if (!doOutput)
return;
cDisplayMenuListView *list = rootView->GetListView();
diff --git a/displayplugin.c b/displayplugin.c
index ad5965f..28085a9 100644
--- a/displayplugin.c
+++ b/displayplugin.c
@@ -1,6 +1,7 @@
+#include "config.h"
#include "displayplugin.h"
-cSkinDisplayPlugin::cSkinDisplayPlugin(cTemplate *pluginTemplate) {
+cSkinDisplayPlugin::cSkinDisplayPlugin(cTemplate *pluginTemplate, int subViewID) {
if (!pluginTemplate) {
doOutput = false;
return;
@@ -8,8 +9,17 @@ cSkinDisplayPlugin::cSkinDisplayPlugin(cTemplate *pluginTemplate) {
doOutput = true;
}
initial = true;
- pluginView = new cDisplayPluginView(pluginTemplate->GetRootView());
- if (!pluginView->createOsd()) {
+ if (subViewID > -1) {
+ cTemplateView *subView = pluginTemplate->GetRootView()->GetSubView((eSubView)subViewID);
+ if (!subView) {
+ doOutput = false;
+ return;
+ }
+ pluginView = new cDisplayPluginView(subView, false);
+ } else {
+ pluginView = new cDisplayPluginView(pluginTemplate->GetRootView(), true);
+ }
+ if (!pluginView->createOsd() && subViewID < 0) {
doOutput = false;
return;
}
@@ -22,6 +32,35 @@ cSkinDisplayPlugin::~cSkinDisplayPlugin(void) {
}
}
+void cSkinDisplayPlugin::Deactivate(bool hide) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->Deactivate(hide);
+}
+
+void cSkinDisplayPlugin::Activate(void) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->Activate();
+}
+
+
+void cSkinDisplayPlugin::ClearViewElement(int id) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->CleanViewElement(id);
+}
+
+void cSkinDisplayPlugin::DisplayViewElement(int id) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->DisplayViewElement(id);
+}
+
void cSkinDisplayPlugin::SetViewElementIntTokens(map<string,int> *intTokens) {
if (pluginView)
pluginView->SetIntTokens(intTokens);
@@ -37,13 +76,6 @@ void cSkinDisplayPlugin::SetViewElementLoopTokens(map<string,vector<map<string,s
pluginView->SetLoopTokens(loopTokens);
}
-void cSkinDisplayPlugin::DisplayViewElement(int id) {
- if (!doOutput) {
- return;
- }
- pluginView->DisplayViewElement(id);
-}
-
void cSkinDisplayPlugin::InitGrids(int viewGridID) {
if (!doOutput) {
return;
@@ -88,10 +120,81 @@ void cSkinDisplayPlugin::ClearGrids(int viewGridID) {
pluginView->ClearGrids(viewGridID);
}
+void cSkinDisplayPlugin::SetTabIntTokens(map<string,int> *intTokens) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->SetTabIntTokens(intTokens);
+}
+
+void cSkinDisplayPlugin::SetTabStringTokens(map<string,string> *stringTokens) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->SetTabStringTokens(stringTokens);
+}
+
+void cSkinDisplayPlugin::SetTabLoopTokens(map<string,vector<map<string,string> > > *loopTokens) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->SetTabLoopTokens(loopTokens);
+}
+
+void cSkinDisplayPlugin::SetTabs(void) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->SetTabs();
+}
+
+void cSkinDisplayPlugin::TabLeft(void) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->TabLeft();
+}
+
+void cSkinDisplayPlugin::TabRight(void) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->TabRight();
+}
+
+void cSkinDisplayPlugin::TabUp(void) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->TabUp();
+}
+
+void cSkinDisplayPlugin::TabDown(void) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->TabDown();
+}
+
+void cSkinDisplayPlugin::DisplayTabs(void) {
+ if (!doOutput) {
+ return;
+ }
+ pluginView->DisplayTab();
+}
+
void cSkinDisplayPlugin::Flush(void) {
if (initial) {
pluginView->DoStart();
initial = false;
}
pluginView->Flush();
+}
+
+bool cSkinDisplayPlugin::ChannelLogoExists(string channelId) {
+ return imgCache->LogoExists(channelId);
+}
+
+string cSkinDisplayPlugin::GetEpgImagePath(void) {
+ return *config.epgImagePath;
} \ No newline at end of file
diff --git a/displayplugin.h b/displayplugin.h
index 6fef255..8c15ec1 100644
--- a/displayplugin.h
+++ b/displayplugin.h
@@ -11,8 +11,11 @@ private:
cDisplayPluginView *pluginView;
public:
cSkinDisplayPlugin(void) {};
- cSkinDisplayPlugin(cTemplate *pluginTemplate);
+ cSkinDisplayPlugin(cTemplate *pluginTemplate, int subViewID);
virtual ~cSkinDisplayPlugin(void);
+ virtual void Deactivate(bool hide);
+ virtual void Activate(void);
+ virtual void ClearViewElement(int id);
virtual void DisplayViewElement(int id);
virtual void SetViewElementIntTokens(map<string,int> *intTokens);
virtual void SetViewElementStringTokens(map<string,string> *stringTokens);
@@ -23,7 +26,18 @@ public:
virtual void DeleteGrid(int viewGridID, long gridID);
virtual void DisplayGrids(int viewGridID);
virtual void ClearGrids(int viewGridID);
+ virtual void SetTabIntTokens(map<string,int> *intTokens);
+ virtual void SetTabStringTokens(map<string,string> *stringTokens);
+ virtual void SetTabLoopTokens(map<string,vector<map<string,string> > > *loopTokens);
+ virtual void SetTabs(void);
+ virtual void TabLeft(void);
+ virtual void TabRight(void);
+ virtual void TabUp(void);
+ virtual void TabDown(void);
+ virtual void DisplayTabs(void);
virtual void Flush(void);
+ virtual bool ChannelLogoExists(string channelId);
+ virtual string GetEpgImagePath(void);
};
#endif //__DISPLAYPLUGIN_H
diff --git a/dtd/displayplugin.dtd b/dtd/displayplugin.dtd
index df18160..c9e7a10 100644
--- a/dtd/displayplugin.dtd
+++ b/dtd/displayplugin.dtd
@@ -2,7 +2,7 @@
<!ENTITY % functions SYSTEM "functions.dtd">
-<!ELEMENT displayplugin (viewelement|grid)* >
+<!ELEMENT displayplugin (viewelement|grid|tab|scrollbar|tablabels)* >
<!ATTLIST displayplugin
x CDATA #REQUIRED
y CDATA #REQUIRED
@@ -21,4 +21,28 @@
debug CDATA #IMPLIED
>
+<!ELEMENT scrollbar (area|areascroll)*>
+<!ATTLIST scrollbar
+ debug CDATA #IMPLIED
+>
+
+<!ELEMENT tablabels (area|areascroll)*>
+<!ATTLIST tablabels
+ debug CDATA #IMPLIED
+>
+
+<!ELEMENT tab (loop|fill|drawtext|drawtextbox|drawimage|drawrectangle|drawellipse)*>
+<!ATTLIST tab
+ x CDATA #REQUIRED
+ y CDATA #REQUIRED
+ width CDATA #REQUIRED
+ height CDATA #REQUIRED
+ layer CDATA #REQUIRED
+ name CDATA #REQUIRED
+ scrollheight CDATA #REQUIRED
+ transparency CDATA #IMPLIED
+ condition CDATA #IMPLIED
+ debug (true|false) #IMPLIED
+>
+
%functions;
diff --git a/dtd/functions.dtd b/dtd/functions.dtd
index 9e474e4..5d6e782 100644
--- a/dtd/functions.dtd
+++ b/dtd/functions.dtd
@@ -1,4 +1,4 @@
-<!ELEMENT area (loop|fill|drawtext|drawtextbox|drawimage|drawrectangle|drawellipse|drawslope)*>
+<!ELEMENT area (loop|fill|drawtext|drawtextbox|drawimage|drawtextvertical|drawrectangle|drawellipse|drawslope)*>
<!ATTLIST area
x CDATA #IMPLIED
y CDATA #IMPLIED
@@ -10,7 +10,7 @@
debug (true|false) #IMPLIED
>
-<!ELEMENT areascroll (loop|fill|drawtext|drawtextbox|drawimage|drawrectangle|drawellipse|drawslope)*>
+<!ELEMENT areascroll (loop|fill|drawtext|drawtextbox|drawtextvertical|drawimage|drawrectangle|drawellipse|drawslope)*>
<!ATTLIST areascroll
x CDATA #IMPLIED
y CDATA #IMPLIED
@@ -37,7 +37,7 @@
debug (true|false) #IMPLIED
>
-<!ELEMENT loop (drawtext|drawtextbox|drawimage|drawrectangle|drawellipse|drawslope)+>
+<!ELEMENT loop (drawtext|drawtextbox|drawtextvertical|drawimage|drawrectangle|drawellipse|drawslope)+>
<!ATTLIST loop
x CDATA #REQUIRED
y CDATA #REQUIRED
@@ -95,6 +95,22 @@
debug NMTOKEN #IMPLIED
>
+<!ELEMENT drawtextvertical EMPTY>
+<!ATTLIST drawtextvertical
+ x CDATA #IMPLIED
+ y CDATA #IMPLIED
+ width CDATA #IMPLIED
+ align (left|center|right) #IMPLIED
+ valign (top|center|bottom) #IMPLIED
+ color CDATA #REQUIRED
+ font CDATA #REQUIRED
+ fontsize CDATA #REQUIRED
+ name NMTOKEN #IMPLIED
+ text CDATA #REQUIRED
+ condition CDATA #IMPLIED
+ debug (true|false) #IMPLIED
+>
+
<!ELEMENT drawrectangle EMPTY>
<!ATTLIST drawrectangle
x CDATA #REQUIRED
diff --git a/libcore/cairoimage.c b/libcore/cairoimage.c
new file mode 100644
index 0000000..a8b56c3
--- /dev/null
+++ b/libcore/cairoimage.c
@@ -0,0 +1,92 @@
+#include "cairoimage.h"
+
+cCairoImage::cCairoImage(void) {
+ surface = NULL;
+ cr = NULL;
+}
+
+cCairoImage::~cCairoImage() {
+ if (cr)
+ cairo_destroy (cr);
+ if (surface)
+ cairo_surface_destroy (surface);
+}
+
+void cCairoImage::InitCairoImage(int width, int height) {
+ this->width = width;
+ this->height = height;
+
+ surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+ cr = cairo_create(surface);
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST);
+}
+
+void cCairoImage::DrawTextVertical(string text, tColor color, string font, int size) {
+
+ int imgHeight = GetTextWidth(text, font, size);
+ InitCairoImage(size * 1.2, imgHeight);
+
+ SetColor(color);
+ cairo_move_to (cr, size, imgHeight);
+ cairo_font_weight_t fontWeight = CAIRO_FONT_WEIGHT_NORMAL;
+ cairo_font_slant_t fontSlant = CAIRO_FONT_SLANT_NORMAL;
+ cairo_select_font_face (cr, font.c_str(), fontSlant, fontWeight);
+ cairo_set_font_size (cr, size);
+ cairo_rotate(cr, 3*M_PI/2);
+ cairo_show_text (cr, text.c_str());
+}
+
+cImage *cCairoImage::GetImage(void) {
+ if (!cr || !surface)
+ return NULL;
+
+ unsigned char *data = cairo_image_surface_get_data(surface);
+ cImage *image = new cImage(cSize(width, height), (tColor*)data);
+ return image;
+}
+
+/**********************************************************************************
+* Private Functions
+**********************************************************************************/
+
+int cCairoImage::GetTextWidth(string text, string font, int size) {
+ cairo_surface_t *tmpSurface;
+ cairo_t *tmpCr;
+
+ double width = 300;
+ double height = (double)size *1.3;
+
+ cairo_font_weight_t fontWeight = CAIRO_FONT_WEIGHT_NORMAL;
+ cairo_font_slant_t fontSlant = CAIRO_FONT_SLANT_NORMAL;
+
+ tmpSurface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ tmpCr = cairo_create (tmpSurface);
+
+ cairo_select_font_face (tmpCr, font.c_str(), fontSlant, fontWeight);
+ cairo_set_font_size (tmpCr, size);
+
+ cairo_text_extents_t te;
+ cairo_text_extents (tmpCr, text.c_str(), &te);
+ int textWidth = te.width;
+
+ cairo_destroy (tmpCr);
+ cairo_surface_destroy (tmpSurface);
+
+ return (double)textWidth * 1.1;
+}
+
+void cCairoImage::SetColor(tColor color) {
+ if (!cr || !surface)
+ return;
+ tIndex tAlpha = (color & 0xFF000000) >> 24;
+ tIndex tRed = (color & 0x00FF0000) >> 16;
+ tIndex tGreen = (color & 0x0000FF00) >> 8;
+ tIndex tBlue = (color & 0x000000FF);
+
+ double a = (int)tAlpha / (double)255;
+ double r = (int)tRed / (double)255;
+ double g = (int)tGreen / (double)255;
+ double b = (int)tBlue / (double)255;
+
+ cairo_set_source_rgba(cr, r, g, b, a);
+} \ No newline at end of file
diff --git a/libcore/cairoimage.h b/libcore/cairoimage.h
new file mode 100644
index 0000000..02e9c89
--- /dev/null
+++ b/libcore/cairoimage.h
@@ -0,0 +1,26 @@
+#ifndef __CAIROIMAGE_H
+#define __CAIROIMAGE_H
+
+#include <cairo.h>
+#include <vdr/osd.h>
+#include <string>
+#include <sstream>
+
+using namespace std;
+
+class cCairoImage {
+private:
+ int width;
+ int height;
+ cairo_surface_t *surface;
+ cairo_t *cr;
+ void SetColor(tColor color);
+ int GetTextWidth(string text, string font, int size);
+public:
+ cCairoImage(void);
+ virtual ~cCairoImage();
+ void InitCairoImage(int width, int height);
+ void DrawTextVertical(string text, tColor color, string font, int size);
+ cImage *GetImage(void);
+};
+#endif //__CAIROIMAGE_H \ No newline at end of file
diff --git a/libcore/imagecache.c b/libcore/imagecache.c
index 2a9a948..e6188d2 100644
--- a/libcore/imagecache.c
+++ b/libcore/imagecache.c
@@ -4,6 +4,7 @@
#include <fstream>
#include <sys/stat.h>
#include "imagecache.h"
+#include "cairoimage.h"
#include "../config.h"
#include "helpers.h"
@@ -331,6 +332,28 @@ cImage *cImageCache::GetSkinpart(string name, int width, int height) {
return NULL;
}
+cImage *cImageCache::GetVerticalText(string text, tColor color, string font, int size) {
+ cMutexLock MutexLock(&mutex);
+ stringstream buf;
+ buf << text << "_" << size;
+ string imgName = buf.str();
+ map<string, cImage*>::iterator hit = cairoImageCache.find(imgName);
+ if (hit != cairoImageCache.end()) {
+ return (cImage*)hit->second;
+ } else {
+ cCairoImage c;
+ c.DrawTextVertical(text, color, font, size);
+ cImage *image = c.GetImage();
+ cairoImageCache.insert(pair<string, cImage*>(imgName, image));
+ hit = cairoImageCache.find(imgName);
+ if (hit != cairoImageCache.end()) {
+ return (cImage*)hit->second;
+ }
+ }
+ return NULL;
+}
+
+
bool cImageCache::LoadIcon(eImageType type, string name) {
cString subdir("");
if (type == itMenuIcon)
@@ -409,11 +432,17 @@ void cImageCache::Clear(void) {
}
channelLogoCache.clear();
- for(map<std::string, cImage*>::const_iterator it = skinPartsCache.begin(); it != skinPartsCache.end(); it++) {
+ for(map<string, cImage*>::const_iterator it = skinPartsCache.begin(); it != skinPartsCache.end(); it++) {
cImage *img = (cImage*)it->second;
delete img;
}
skinPartsCache.clear();
+
+ for(map<string, cImage*>::const_iterator it = cairoImageCache.begin(); it != cairoImageCache.end(); it++) {
+ cImage *img = (cImage*)it->second;
+ delete img;
+ }
+ cairoImageCache.clear();
}
void cImageCache::Debug(bool full) {
diff --git a/libcore/imagecache.h b/libcore/imagecache.h
index 086d8e4..f2c04f3 100644
--- a/libcore/imagecache.h
+++ b/libcore/imagecache.h
@@ -30,6 +30,8 @@ public:
//skinparts
void CacheSkinpart(string path, int width, int height);
cImage *GetSkinpart(string name, int width, int height);
+ //cairo special images
+ cImage *GetVerticalText(string text, tColor color, string font, int size);
//helpers
void Clear(void);
void Debug(bool full);
@@ -48,6 +50,7 @@ private:
map<string, cImage*> iconCache;
map<string, cImage*> channelLogoCache;
map<string, cImage*> skinPartsCache;
+ map<string, cImage*> cairoImageCache;
bool LoadIcon(eImageType type, string name);
bool LoadLogo(const cChannel *channel);
bool LoadSeparatorLogo(string name);
diff --git a/libcore/pixmapcontainer.c b/libcore/pixmapcontainer.c
index b3ea83e..3e5e60a 100644
--- a/libcore/pixmapcontainer.c
+++ b/libcore/pixmapcontainer.c
@@ -16,6 +16,7 @@ cPixmapContainer::cPixmapContainer(int numPixmaps) {
pixmaps[i] = NULL;
pixmapsTransparency[i] = 0;
}
+ pixmapsLayer = NULL;
mutex.Unlock();
checkRunning = false;
fadeTime = 0;
@@ -33,6 +34,9 @@ cPixmapContainer::~cPixmapContainer(void) {
}
delete[] pixmaps;
delete[] pixmapsTransparency;
+ if (pixmapsLayer)
+ delete[] pixmapsLayer;
+
if (deleteOsdOnExit && osd) {
mutex.Lock();
delete osd;
@@ -65,12 +69,6 @@ void cPixmapContainer::OpenFlush(void) {
flushState = fsOpen;
}
-bool cPixmapContainer::PixmapExists(int num) {
- cMutexLock MutexLock(&mutex);
- if (pixmaps[num])
- return true;
- return false;
-}
void cPixmapContainer::DoFlush(void) {
cMutexLock MutexLock(&mutex);
@@ -81,6 +79,41 @@ void cPixmapContainer::DoFlush(void) {
}
}
+void cPixmapContainer::HidePixmaps(void) {
+ cMutexLock MutexLock(&mutex);
+ pixmapsLayer = new int[numPixmaps];
+ for(int i=0; i < numPixmaps; i++) {
+ if (!pixmaps[i]) {
+ pixmapsLayer[i] = 0;
+ continue;
+ }
+ pixmapsLayer[i] = pixmaps[i]->Layer();
+ pixmaps[i]->SetLayer(-1);
+ }
+}
+
+void cPixmapContainer::ShowPixmaps(void) {
+ cMutexLock MutexLock(&mutex);
+ if (!pixmapsLayer)
+ return;
+ for(int i=0; i < numPixmaps; i++) {
+ if (!pixmaps[i])
+ continue;
+ pixmaps[i]->SetLayer(pixmapsLayer[i]);
+ }
+}
+
+/******************************************************************************************************
+* Protected Functions
+******************************************************************************************************/
+
+bool cPixmapContainer::PixmapExists(int num) {
+ cMutexLock MutexLock(&mutex);
+ if (pixmaps[num])
+ return true;
+ return false;
+}
+
void cPixmapContainer::CreatePixmap(int num, int Layer, const cRect &ViewPort, const cRect &DrawPort) {
cMutexLock MutexLock(&mutex);
if (!osd || (checkRunning && !Running()))
diff --git a/libcore/pixmapcontainer.h b/libcore/pixmapcontainer.h
index 8fe1dfe..3b367c8 100644
--- a/libcore/pixmapcontainer.h
+++ b/libcore/pixmapcontainer.h
@@ -20,13 +20,14 @@ private:
int numPixmaps;
cPixmap **pixmaps;
int *pixmapsTransparency;
+ int *pixmapsLayer;
bool checkRunning;
int fadeTime;
bool deleteOsdOnExit;
protected:
void SetInitFinished(void) { pixContainerInit = false; };
bool CreateOsd(int Left, int Top, int Width, int Height);
- void DeleteOsdOnExit(void) { deleteOsdOnExit = true; };
+ void DeleteOsdOnExit(bool doDelete = true) { deleteOsdOnExit = doDelete; };
//Wrappers for access to pixmaps
bool PixmapExists(int num);
int NumPixmaps(void) { return numPixmaps; };
@@ -69,6 +70,8 @@ public:
void LockFlush(void);
void OpenFlush(void);
void DoFlush(void);
+ void HidePixmaps(void);
+ void ShowPixmaps(void);
virtual void Action(void) {};
};
diff --git a/libskindesigner/osdelements.c b/libskindesigner/osdelements.c
new file mode 100644
index 0000000..11915a8
--- /dev/null
+++ b/libskindesigner/osdelements.c
@@ -0,0 +1,203 @@
+#include "osdelements.h"
+
+/**********************************************************************
+* cOsdElement
+**********************************************************************/
+cOsdElement::cOsdElement(cSkinDisplayPlugin *view) {
+ this->view = view;
+}
+
+cOsdElement::~cOsdElement() {
+}
+
+void cOsdElement::ClearTokens(void) {
+ stringTokens.clear();
+ intTokens.clear();
+ loopTokens.clear();
+}
+
+void cOsdElement::AddStringToken(string key, string value) {
+ stringTokens.insert(pair<string,string>(key, value));
+}
+
+void cOsdElement::AddIntToken(string key, int value) {
+ intTokens.insert(pair<string,int>(key, value));
+}
+
+void cOsdElement::AddLoopToken(string loopName, map<string, string> &tokens) {
+ map<string, vector<map<string, string> > >::iterator hitLoop = loopTokens.find(loopName);
+ if (hitLoop == loopTokens.end()) {
+ vector<map<string, string> > tokenVector;
+ tokenVector.push_back(tokens);
+ loopTokens.insert(pair<string, vector<map<string, string> > >(loopName, tokenVector));
+ } else {
+ vector<map<string, string> > *tokenVector = &hitLoop->second;
+ tokenVector->push_back(tokens);
+ }
+}
+
+bool cOsdElement::ChannelLogoExists(string channelId) {
+ return view->ChannelLogoExists(channelId);
+}
+
+string cOsdElement::GetEpgImagePath(void) {
+ return view->GetEpgImagePath();
+}
+
+
+/**********************************************************************
+* cViewElement
+**********************************************************************/
+cViewElement::cViewElement(cSkinDisplayPlugin *view, int viewElementID) : cOsdElement(view) {
+ this->viewElementID = viewElementID;
+}
+
+cViewElement::~cViewElement() {
+}
+
+void cViewElement::Clear(void) {
+ if (!view)
+ return;
+ view->ClearViewElement(viewElementID);
+}
+
+void cViewElement::Display(void) {
+ if (!view)
+ return;
+ view->SetViewElementIntTokens(&intTokens);
+ view->SetViewElementStringTokens(&stringTokens);
+ view->SetViewElementLoopTokens(&loopTokens);
+ view->DisplayViewElement(viewElementID);
+}
+
+/**********************************************************************
+* cViewGrid
+**********************************************************************/
+cViewGrid::cViewGrid(cSkinDisplayPlugin *view, int viewGridID) : cOsdElement(view) {
+ this->viewGridID = viewGridID;
+}
+
+cViewGrid::~cViewGrid() {
+}
+
+void cViewGrid::SetGrid(long gridID, double x, double y, double width, double height) {
+ if (!view)
+ return;
+ view->SetGrid(viewGridID, gridID, x, y, width, height, &intTokens, &stringTokens);
+}
+
+void cViewGrid::SetCurrent(long gridID, bool current) {
+ if (!view)
+ return;
+ view->SetGridCurrent(viewGridID, gridID, current);
+}
+
+void cViewGrid::MoveGrid(long gridID, double x, double y, double width, double height) {
+ if (!view)
+ return;
+ view->SetGrid(viewGridID, gridID, x, y, width, height, NULL, NULL);
+}
+
+void cViewGrid::Delete(long gridID) {
+ if (!view)
+ return;
+ view->DeleteGrid(viewGridID, gridID);
+}
+
+void cViewGrid::Clear(void) {
+ if (!view)
+ return;
+ view->ClearGrids(viewGridID);
+}
+
+void cViewGrid::Display(void) {
+ if (!view)
+ return;
+ view->DisplayGrids(viewGridID);
+}
+
+/**********************************************************************
+* cViewTab
+**********************************************************************/
+cViewTab::cViewTab(cSkinDisplayPlugin *view) : cOsdElement(view) {
+}
+
+cViewTab::~cViewTab() {
+}
+
+void cViewTab::Init(void) {
+ view->SetTabIntTokens(&intTokens);
+ view->SetTabStringTokens(&stringTokens);
+ view->SetTabLoopTokens(&loopTokens);
+ view->SetTabs();
+}
+
+void cViewTab::Left(void) {
+ view->TabLeft();
+}
+
+void cViewTab::Right(void) {
+ view->TabRight();
+}
+
+void cViewTab::Up(void) {
+ view->TabUp();
+}
+
+void cViewTab::Down(void) {
+ view->TabDown();
+}
+
+void cViewTab::Display(void) {
+ if (!view)
+ return;
+ view->DisplayTabs();
+}
+
+/**********************************************************************
+* cOsdView
+**********************************************************************/
+cOsdView::cOsdView(cSkinDisplayPlugin *displayPlugin) {
+ this->displayPlugin = displayPlugin;
+}
+
+cOsdView::~cOsdView() {
+ delete displayPlugin;
+}
+
+void cOsdView::Deactivate(bool hide) {
+ if (!displayPlugin)
+ return;
+ displayPlugin->Deactivate(hide);
+}
+
+void cOsdView::Activate(void) {
+ if (!displayPlugin)
+ return;
+ displayPlugin->Activate();
+}
+
+cViewElement *cOsdView::GetViewElement(int viewElementID) {
+ if (!displayPlugin)
+ return NULL;
+ return new cViewElement(displayPlugin, viewElementID);
+}
+
+cViewGrid *cOsdView::GetViewGrid(int viewGridID) {
+ if (!displayPlugin)
+ return NULL;
+ displayPlugin->InitGrids(viewGridID);
+ return new cViewGrid(displayPlugin, viewGridID);
+}
+
+cViewTab *cOsdView::GetViewTabs(void) {
+ if (!displayPlugin)
+ return NULL;
+ return new cViewTab(displayPlugin);
+}
+
+void cOsdView::Display(void) {
+ if (!displayPlugin)
+ return;
+ displayPlugin->Flush();
+}
diff --git a/libskindesigner/osdelements.h b/libskindesigner/osdelements.h
new file mode 100644
index 0000000..057a1fd
--- /dev/null
+++ b/libskindesigner/osdelements.h
@@ -0,0 +1,91 @@
+#ifndef __OSDELEMENTS_H
+#define __OSDELEMENTS_H
+
+#include <vdr/plugin.h>
+#include "services.h"
+
+/**********************************************************************
+* cOsdElement
+**********************************************************************/
+
+class cOsdElement {
+protected:
+ cSkinDisplayPlugin *view;
+ map < string, string > stringTokens;
+ map < string, int > intTokens;
+ map < string, vector< map< string, string > > > loopTokens;
+public:
+ cOsdElement(cSkinDisplayPlugin *view);
+ virtual ~cOsdElement();
+ void AddLoopToken(string loopName, map<string, string> &tokens);
+ void AddStringToken(string key, string value);
+ void AddIntToken(string key, int value);
+ void ClearTokens(void);
+ bool ChannelLogoExists(string channelId);
+ string GetEpgImagePath(void);
+};
+
+/**********************************************************************
+* cViewElement
+**********************************************************************/
+class cViewElement : public cOsdElement {
+private:
+ int viewElementID;
+public:
+ cViewElement(cSkinDisplayPlugin *view, int viewElementID);
+ virtual ~cViewElement();
+ void Clear(void);
+ void Display(void);
+};
+
+/**********************************************************************
+* cViewGrid
+**********************************************************************/
+class cViewGrid : public cOsdElement {
+private:
+ int viewGridID;
+public:
+ cViewGrid(cSkinDisplayPlugin *view, int viewGridID);
+ virtual ~cViewGrid();
+ void SetGrid(long gridID, double x, double y, double width, double height);
+ void SetCurrent(long gridID, bool current);
+ void MoveGrid(long gridID, double x, double y, double width, double height);
+ void Delete(long gridID);
+ void Clear(void);
+ void Display(void);
+};
+
+/**********************************************************************
+* cViewTab
+**********************************************************************/
+class cViewTab : public cOsdElement {
+private:
+public:
+ cViewTab(cSkinDisplayPlugin *view);
+ virtual ~cViewTab();
+ void Init(void);
+ void Left(void);
+ void Right(void);
+ void Up(void);
+ void Down(void);
+ void Display(void);
+};
+
+/**********************************************************************
+* cOsdView
+**********************************************************************/
+class cOsdView {
+private:
+ cSkinDisplayPlugin *displayPlugin;
+public:
+ cOsdView(cSkinDisplayPlugin *displayPlugin);
+ virtual ~cOsdView();
+ void Deactivate(bool hide);
+ void Activate(void);
+ cViewElement *GetViewElement(int viewElementID);
+ cViewGrid *GetViewGrid(int viewGridID);
+ cViewTab *GetViewTabs(void);
+ void Display(void);
+};
+
+#endif // __OSDELEMENTS_H \ No newline at end of file
diff --git a/libskindesigner/services.h b/libskindesigner/services.h
new file mode 100644
index 0000000..8fa9c69
--- /dev/null
+++ b/libskindesigner/services.h
@@ -0,0 +1,131 @@
+#ifndef __SKINDESIGNERSERVICES_H
+#define __SKINDESIGNERSERVICES_H
+
+using namespace std;
+
+#include <string>
+#include <vector>
+#include <map>
+
+enum eMenuType {
+ mtList,
+ mtText
+};
+
+class cSDDisplayMenu : public cSkinDisplayMenu {
+public:
+ virtual void SetTitle(const char *Title);
+ virtual void SetPluginMenu(string name, int menu, int type, bool init);
+ virtual bool SetItemPlugin(map<string,string> *stringTokens, map<string,int> *intTokens, map<string,vector<map<string,string> > > *loopTokens, int Index, bool Current, bool Selectable);
+ virtual bool SetPluginText(map<string,string> *stringTokens, map<string,int> *intTokens, map<string,vector<map<string,string> > > *loopTokens);
+};
+
+class cSkinDisplayPlugin {
+public:
+ cSkinDisplayPlugin(void);
+ virtual ~cSkinDisplayPlugin(void);
+ virtual void Deactivate(bool hide);
+ virtual void Activate(void);
+ virtual void ClearViewElement(int id);
+ virtual void DisplayViewElement(int id);
+ virtual void SetViewElementIntTokens(map<string,int> *intTokens);
+ virtual void SetViewElementStringTokens(map<string,string> *stringTokens);
+ virtual void SetViewElementLoopTokens(map<string,vector<map<string,string> > > *loopTokens);
+ virtual void InitGrids(int viewGridID);
+ virtual void SetGrid(int viewGridID, long gridID, double x, double y, double width, double height, map<string,int> *intTokens, map<string,string> *stringTokens);
+ virtual void SetGridCurrent(int viewGridID, long gridID, bool current);
+ virtual void DeleteGrid(int viewGridID, long gridID);
+ virtual void DisplayGrids(int viewGridID);
+ virtual void ClearGrids(int viewGridID);
+ virtual void SetTabIntTokens(map<string,int> *intTokens);
+ virtual void SetTabStringTokens(map<string,string> *stringTokens);
+ virtual void SetTabLoopTokens(map<string,vector<map<string,string> > > *loopTokens);
+ virtual void SetTabs(void);
+ virtual void TabLeft(void);
+ virtual void TabRight(void);
+ virtual void TabUp(void);
+ virtual void TabDown(void);
+ virtual void DisplayTabs(void);
+ virtual void Flush(void);
+ virtual bool ChannelLogoExists(string channelId);
+ virtual string GetEpgImagePath(void);
+};
+
+/*********************************************************************
+* Data Structures for Service Calls
+*********************************************************************/
+
+// Data structure for service "RegisterPlugin"
+class RegisterPlugin {
+public:
+ RegisterPlugin(void) {
+ name = "";
+ };
+ void SetMenu(int key, string templateName) {
+ menus.insert(pair<int, string>(key, templateName));
+ }
+ void SetView(int key, string templateName) {
+ views.insert(pair<int, string>(key, templateName));
+ }
+ void SetSubView(int view, int subView, string templateName) {
+ pair<int, string> sub = make_pair(subView, templateName);
+ subViews.insert(pair<int, pair<int, string> >(view, sub));
+ }
+ void SetViewElement(int view, int viewElement, string name) {
+ map< int, map<int, string> >::iterator hit = viewElements.find(view);
+ if (hit == viewElements.end()) {
+ map<int, string> vE;
+ vE.insert(pair<int, string >(viewElement, name));
+ viewElements.insert(pair<int, map < int, string > >(view, vE));
+ } else {
+ (hit->second).insert(pair<int, string >(viewElement, name));
+ }
+ }
+ void SetViewGrid(int view, int viewGrid, string name) {
+ map< int, map<int, string> >::iterator hit = viewGrids.find(view);
+ if (hit == viewGrids.end()) {
+ map<int, string> vG;
+ vG.insert(pair<int, string >(viewGrid, name));
+ viewGrids.insert(pair<int, map < int, string > >(view, vG));
+ } else {
+ (hit->second).insert(pair<int, string >(viewGrid, name));
+ }
+ }
+// in
+ string name; //name of plugin
+ map< int, string > menus; //menus as key -> templatename hashmap
+ map< int, string> views; //standalone views as key -> templatename hashmap
+ multimap< int, pair <int, string> > subViews; //subviews of standalone views as view -> (subview, templatename) multimap
+ map< int, map <int, string> > viewElements; //viewelements as key -> (viewelement, viewelementname) hashmap
+ map< int, map <int, string> > viewGrids; //viewgrids as key -> (viewgrid, viewgridname) hashmap
+//out
+};
+
+// Data structure for service "GetDisplayMenu"
+class GetDisplayMenu {
+public:
+ GetDisplayMenu(void) {
+ displayMenu = NULL;
+ };
+// in
+//out
+ cSDDisplayMenu *displayMenu;
+};
+
+// Data structure for service "GetDisplayPlugin"
+class GetDisplayPlugin {
+public:
+ GetDisplayPlugin(void) {
+ pluginName = "";
+ viewID = -1;
+ subViewID = -1;
+ displayPlugin = NULL;
+ };
+// in
+ string pluginName;
+ int viewID;
+ int subViewID;
+//out
+ cSkinDisplayPlugin *displayPlugin;
+};
+#endif //__SKINDESIGNERSERVICES_H
diff --git a/skindesclient-0.0.1/libskindesigner/skindesignerosdbase.c b/libskindesigner/skindesignerosdbase.c
index 821efdc..4d40615 100644
--- a/skindesclient-0.0.1/libskindesigner/skindesignerosdbase.c
+++ b/libskindesigner/skindesignerosdbase.c
@@ -1,4 +1,41 @@
#include "skindesignerosdbase.h"
+#include "osdelements.h"
+
+/**********************************************************************
+* cSkindesignerOsdObject
+**********************************************************************/
+
+cSkindesignerOsdObject::cSkindesignerOsdObject(void) {
+ pSkinDesigner = NULL;
+ pluginName = "";
+}
+
+cSkindesignerOsdObject::~cSkindesignerOsdObject() {
+}
+
+bool cSkindesignerOsdObject::InitSkindesignerInterface(string pluginName) {
+ this->pluginName = pluginName;
+ pSkinDesigner = cPluginManager::GetPlugin("skindesigner");
+ if (!pSkinDesigner) {
+ return false;
+ }
+ return true;
+}
+
+cOsdView *cSkindesignerOsdObject::GetOsdView(int viewID, int subViewID) {
+ cSkinDisplayPlugin *displayPlugin = NULL;
+ cOsdView *view = NULL;
+ GetDisplayPlugin call;
+ call.pluginName = pluginName;
+ call.viewID = viewID;
+ call.subViewID = subViewID;
+ bool ok = pSkinDesigner->Service("GetDisplayPlugin", &call);
+ if (ok) {
+ displayPlugin = call.displayPlugin;
+ view = new cOsdView(displayPlugin);
+ }
+ return view;
+}
/**********************************************************************
* cSkindesignerOsdItem
diff --git a/skindesclient-0.0.1/libskindesigner/skindesignerosdbase.h b/libskindesigner/skindesignerosdbase.h
index 88068af..060ec11 100644
--- a/skindesclient-0.0.1/libskindesigner/skindesignerosdbase.h
+++ b/libskindesigner/skindesignerosdbase.h
@@ -10,6 +10,26 @@
#include <vdr/plugin.h>
#include "services.h"
+class cOsdView;
+
+/**********************************************************************
+* cSkindesignerOsdObject
+**********************************************************************/
+class cSkindesignerOsdObject : public cOsdObject {
+protected:
+ string pluginName;
+ cPlugin *pSkinDesigner;
+ bool InitSkindesignerInterface(string pluginName);
+ cOsdView *GetOsdView(int viewID, int subViewID = -1);
+public:
+ cSkindesignerOsdObject(void);
+ virtual ~cSkindesignerOsdObject();
+ virtual void Show(void) {};
+};
+
+/**********************************************************************
+* cSkindesignerOsdItem
+**********************************************************************/
class cSkindesignerOsdItem : public cOsdItem {
private:
cSDDisplayMenu *sdDisplayMenu;
@@ -28,7 +48,9 @@ public:
void AddLoopToken(string loopName, map<string, string> &tokens);
};
-
+/**********************************************************************
+* cSkindesignerOsdMenu
+**********************************************************************/
class cSkindesignerOsdMenu : public cOsdMenu {
private:
bool init;
diff --git a/libtemplate/template.c b/libtemplate/template.c
index 01a7b28..189efd0 100644
--- a/libtemplate/template.c
+++ b/libtemplate/template.c
@@ -56,7 +56,8 @@ bool cTemplate::ReadFromXML(string xmlfile) {
if (!parser.ParseView()) {
return false;
}
- //read additional plugin templates
+
+ //read additional plugin menu templates
bool ok = true;
if (viewType == vtDisplayMenu) {
config.InitPluginMenuIterator();
@@ -114,6 +115,39 @@ void cTemplate::CacheImages(void) {
}
}
+bool cTemplate::SetSubViews(string plugName, int viewID) {
+ map <int,string> subViews = config.GetPluginSubViews(plugName, viewID);
+
+ if (subViews.size() == 0) {
+ return true;
+ }
+
+ for (map<int,string>::iterator it = subViews.begin(); it != subViews.end(); it ++) {
+ int subViewID = it->first;
+ stringstream templateName;
+ templateName << "plug-" << plugName << "-" << it->second;
+ string subViewTemplate = templateName.str();
+ cTemplateView *plgTemplateView = new cTemplateViewPlugin(plugName, subViewID);
+ plgTemplateView->SetGlobals(globals);
+ cXmlParser parser;
+ if (!parser.ReadView(plgTemplateView, subViewTemplate)) {
+ esyslog("skindesigner: error reading plugin %s template", plugName.c_str());
+ delete plgTemplateView;
+ return false;
+ }
+ if (!parser.ParseView()) {
+ esyslog("skindesigner: error reading plugin %s template", plugName.c_str());
+ delete plgTemplateView;
+ return false;
+ }
+ stringstream svid;
+ svid << subViewID;
+ rootView->AddSubView(svid.str(), plgTemplateView);
+ }
+ return true;
+}
+
+
void cTemplate::Debug(void) {
rootView->Debug();
}
diff --git a/libtemplate/template.h b/libtemplate/template.h
index 79a824b..75dce5c 100644
--- a/libtemplate/template.h
+++ b/libtemplate/template.h
@@ -52,6 +52,8 @@ public:
//get fonts for pre caching
vector< pair<string, int> > GetUsedFonts(void);
void CacheImages(void);
+ //Set Plugin Subviews
+ bool SetSubViews(string plugName, int viewID);
//Debug
void Debug(void);
};
diff --git a/libtemplate/templatefunction.c b/libtemplate/templatefunction.c
index 0b3de8a..8156633 100644
--- a/libtemplate/templatefunction.c
+++ b/libtemplate/templatefunction.c
@@ -725,11 +725,16 @@ bool cTemplateFunction::SetNumericParameter(eParamType type, string value) {
break;
case ptY:
case ptHeight:
- case ptFontSize:
case ptScaleTvY:
case ptScaleTvHeight:
param.SetVertical();
break;
+ case ptFontSize: {
+ if (this->type == ftDrawTextVertical)
+ param.SetHorizontal();
+ else
+ param.SetVertical();
+ break; }
case ptLayer:
param.SetDefault(1);
break;
diff --git a/libtemplate/templatefunction.h b/libtemplate/templatefunction.h
index f7af25c..e63850e 100644
--- a/libtemplate/templatefunction.h
+++ b/libtemplate/templatefunction.h
@@ -29,6 +29,7 @@ enum eFuncType {
ftFill,
ftDrawText,
ftDrawTextBox,
+ ftDrawTextVertical,
ftDrawImage,
ftDrawRectangle,
ftDrawEllipse,
@@ -198,6 +199,8 @@ public:
//Dynamic width or height parameter
int GetWidth(bool cutted = true);
int GetHeight(void);
+ int GetContainerWidth(void) { return containerWidth; };
+ int GetContainerHeight(void) { return containerHeight; };
void GetNeededWidths(multimap<eParamType,string> *widths);
void GetNeededHeights(multimap<eParamType,string> *heights);
void GetNeededPosX(multimap<eParamType,string> *posXs);
diff --git a/libtemplate/templatepixmap.c b/libtemplate/templatepixmap.c
index 40e35a3..52ae63f 100644
--- a/libtemplate/templatepixmap.c
+++ b/libtemplate/templatepixmap.c
@@ -124,6 +124,8 @@ void cTemplatePixmap::AddFunction(string name, vector<pair<string, string> > &pa
type = ftDrawText;
} else if (!name.compare("drawtextbox")) {
type = ftDrawTextBox;
+ } else if (!name.compare("drawtextvertical")) {
+ type = ftDrawTextVertical;
} else if (!name.compare("drawimage")) {
type = ftDrawImage;
} else if (!name.compare("drawrectangle")) {
diff --git a/libtemplate/templateview.c b/libtemplate/templateview.c
index 753b242..c37b5f0 100644
--- a/libtemplate/templateview.c
+++ b/libtemplate/templateview.c
@@ -642,6 +642,22 @@ void cTemplateView::SetFunctionDefinitions(void) {
attributes.insert("floatheight");
funcsAllowed.insert(pair< string, set<string> >(name, attributes));
+ name = "drawtextvertical";
+ attributes.clear();
+ attributes.insert("debug");
+ attributes.insert("condition");
+ attributes.insert("name");
+ attributes.insert("x");
+ attributes.insert("y");
+ attributes.insert("height");
+ attributes.insert("align");
+ attributes.insert("valign");
+ attributes.insert("font");
+ attributes.insert("fontsize");
+ attributes.insert("color");
+ attributes.insert("text");
+ funcsAllowed.insert(pair< string, set<string> >(name, attributes));
+
name = "drawimage";
attributes.clear();
attributes.insert("debug");
@@ -1849,6 +1865,20 @@ cTemplateViewPlugin::cTemplateViewPlugin(string pluginName, int viewID) {
attributes.insert("scaletvheight");
funcsAllowed.insert(pair< string, set<string> >(viewName, attributes));
+ //definition of allowed parameters for viewtab
+ attributes.clear();
+ attributes.insert("debug");
+ attributes.insert("name");
+ attributes.insert("condition");
+ attributes.insert("x");
+ attributes.insert("y");
+ attributes.insert("width");
+ attributes.insert("height");
+ attributes.insert("layer");
+ attributes.insert("transparency");
+ attributes.insert("scrollheight");
+ funcsAllowed.insert(pair< string, set<string> >("tab", attributes));
+
attributes.clear();
attributes.insert("x");
attributes.insert("y");
@@ -1858,15 +1888,23 @@ cTemplateViewPlugin::cTemplateViewPlugin(string pluginName, int viewID) {
funcsAllowed.insert(pair< string, set<string> >("grid", attributes));
viewElementsAllowed.insert("viewelement");
+ viewElementsAllowed.insert("scrollbar");
+ viewElementsAllowed.insert("tablabels");
viewGridsAllowed.insert("grid");
}
cTemplateViewPlugin::~cTemplateViewPlugin() {
}
+void cTemplateViewPlugin::AddSubView(string sSubView, cTemplateView *subView) {
+ int subViewId = atoi(sSubView.c_str());
+ subViews.insert(pair< eSubView, cTemplateView* >((eSubView)subViewId, subView));
+}
+
void cTemplateViewPlugin::AddPixmap(string sViewElement, cTemplatePixmap *pix, vector<pair<string, string> > &viewElementattributes) {
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")) {
@@ -1875,15 +1913,22 @@ void cTemplateViewPlugin::AddPixmap(string sViewElement, cTemplatePixmap *pix, v
break;
}
}
- if (!found) {
- esyslog("skindesigner: no name defined for plugin %s viewelement", pluginName.c_str());
- }
-
- int viewElementID = config.GetPluginViewElementID(pluginName, viewElementName, viewID);
- if (viewElementID == -1) {
- esyslog("skindesigner: %s: unknown ViewElement in displayplugin: %s", pluginName.c_str(), viewElementName.c_str());
- return;
+ if (found) {
+ viewElementID = config.GetPluginViewElementID(pluginName, viewElementName, viewID);
+ } else {
+ //check for internal view elements
+ ePluginInteralViewElements pve = pveUndefined;
+ if (!sViewElement.compare("scrollbar")) {
+ pve = pveScrollbar;
+ } else if (!sViewElement.compare("tablabels")) {
+ pve = pveTablabels;
+ }
+ if (pve == pveUndefined) {
+ esyslog("skindesigner: %s: unknown ViewElement in displayplugin: %s", pluginName.c_str(), viewElementName.c_str());
+ return;
+ }
+ viewElementID = pve;
}
pix->SetGlobals(globals);
@@ -1932,3 +1977,7 @@ void cTemplateViewPlugin::AddPixmapGrid(cTemplatePixmap *pix, vector<pair<string
(hit->second)->AddPixmap(pix);
}
}
+
+void cTemplateViewPlugin::AddViewTab(cTemplateViewTab *viewTab) {
+ viewTabs.push_back(viewTab);
+}
diff --git a/libtemplate/templateview.h b/libtemplate/templateview.h
index 7e0d43e..79564b7 100644
--- a/libtemplate/templateview.h
+++ b/libtemplate/templateview.h
@@ -211,7 +211,7 @@ public:
void AddViewList(string sViewList, cTemplateViewList *viewList);
};
-// --- cTemplateViewAudioTracks -------------------------------------------------------------
+// --- cTemplateViewPlugin -------------------------------------------------------------
class cTemplateViewPlugin : public cTemplateView {
private:
@@ -220,8 +220,10 @@ private:
public:
cTemplateViewPlugin(string pluginName, int viewID);
virtual ~cTemplateViewPlugin(void);
+ void AddSubView(string sSubView, cTemplateView *subView);
void AddPixmap(string viewElement, cTemplatePixmap *pix, vector<pair<string, string> > &viewElementattributes);
void AddPixmapGrid(cTemplatePixmap *pix, vector<pair<string, string> > &gridAttributes);
+ void AddViewTab(cTemplateViewTab *viewTab);
};
#endif //__TEMPLATEVIEW_H
diff --git a/libtemplate/templateviewelement.h b/libtemplate/templateviewelement.h
index ebddcd2..be7bb74 100644
--- a/libtemplate/templateviewelement.h
+++ b/libtemplate/templateviewelement.h
@@ -70,6 +70,12 @@ enum eViewElement {
veVolume
};
+enum ePluginInteralViewElements {
+ pveScrollbar = -1,
+ pveTablabels = -2,
+ pveUndefined = 0
+};
+
class cTemplateViewElement {
protected:
bool debugTokens;
diff --git a/libtemplate/xmlparser.c b/libtemplate/xmlparser.c
index e086ba4..aa7d498 100644
--- a/libtemplate/xmlparser.c
+++ b/libtemplate/xmlparser.c
@@ -200,6 +200,8 @@ bool cXmlParser::ParseView(void) {
vector<pair<string, string> > attribs;
ParseAttributes(attr, node, attribs);
ParseGrid(node->xmlChildrenNode, attribs);
+ } else if (!xmlStrcmp(node->name, (const xmlChar *) "tab")) {
+ ParseViewTab(node, view);
} else {
return false;
}
diff --git a/services.h b/services.h
index ea2372b..233d1c7 100644
--- a/services.h
+++ b/services.h
@@ -22,6 +22,10 @@ public:
void SetView(int key, string templateName) {
views.insert(pair<int, string>(key, templateName));
}
+ void SetSubView(int view, int subView, string templateName) {
+ pair<int, string> sub = make_pair(subView, templateName);
+ subViews.insert(pair<int, pair<int, string> >(view, sub));
+ }
void SetViewElement(int view, int viewElement, string name) {
map< int, map<int, string> >::iterator hit = viewElements.find(view);
if (hit == viewElements.end()) {
@@ -43,11 +47,12 @@ public:
}
}
// in
- string name; //name of plugin
- map< int, string > menus; //menus as key -> templatename hashmap
- map< int, string> views; //standalone views as key -> templatename hashmap
- map< int, map <int, string> > viewElements; //viewelements as key -> (viewelement, viewelementname) hashmap
- map< int, map <int, string> > viewGrids; //viewgrids as key -> (viewgrid, viewgridname) hashmap
+ string name; //name of plugin
+ map< int, string > menus; //menus as key -> templatename hashmap
+ map< int, string> views; //standalone views as key -> templatename hashmap
+ multimap< int, pair <int, string> > subViews; //subviews of standalone views as view -> (subview, templatename) multimap
+ map< int, map <int, string> > viewElements; //viewelements as key -> (viewelement, viewelementname) hashmap
+ map< int, map <int, string> > viewGrids; //viewgrids as key -> (viewgrid, viewgridname) hashmap
//out
};
@@ -68,11 +73,13 @@ public:
GetDisplayPlugin(void) {
pluginName = "";
viewID = -1;
+ subViewID = -1;
displayPlugin = NULL;
};
// in
string pluginName;
int viewID;
+ int subViewID;
//out
cSkinDisplayPlugin *displayPlugin;
};
diff --git a/skindesclient-0.0.1/COPYING b/skindesclient-0.0.1/COPYING
deleted file mode 100644
index f90922e..0000000
--- a/skindesclient-0.0.1/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/skindesclient-0.0.1/Makefile b/skindesclient-0.0.1/Makefile
deleted file mode 100644
index 7e19d59..0000000
--- a/skindesclient-0.0.1/Makefile
+++ /dev/null
@@ -1,123 +0,0 @@
-#
-# Makefile for a Video Disk Recorder plugin
-#
-# $Id$
-
-# The official name of this plugin.
-# This name will be used in the '-P...' option of VDR to load the plugin.
-# By default the main source file also carries this name.
-
-PLUGIN = skindesclient
-
-### The version number of this plugin (taken from the main source file):
-
-VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
-
-### The directory environment:
-
-# Use package data if installed...otherwise assume we're under the VDR source directory:
-PKGCFG = $(if $(VDRDIR),$(shell pkg-config --variable=$(1) $(VDRDIR)/vdr.pc),$(shell pkg-config --variable=$(1) vdr || pkg-config --variable=$(1) ../../../vdr.pc))
-LIBDIR = $(call PKGCFG,libdir)
-LOCDIR = $(call PKGCFG,locdir)
-PLGCFG = $(call PKGCFG,plgcfg)
-#
-TMPDIR ?= /tmp
-
-### The compiler options:
-
-export CFLAGS = $(call PKGCFG,cflags)
-export CXXFLAGS = $(call PKGCFG,cxxflags)
-
-### The version number of VDR's plugin API:
-
-APIVERSION = $(call PKGCFG,apiversion)
-
-### Allow user defined options to overwrite defaults:
-
--include $(PLGCFG)
-
-### The name of the distribution archive:
-
-ARCHIVE = $(PLUGIN)-$(VERSION)
-PACKAGE = vdr-$(ARCHIVE)
-
-### The name of the shared object file:
-
-SOFILE = libvdr-$(PLUGIN).so
-
-### Includes and Defines (add further entries here):
-
-INCLUDES +=
-
-DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
-
-### The object files (add further files here):
-
-OBJS = $(PLUGIN).o \
- libskindesigner/skindesignerosdbase.o
-
-### The main target:
-
-all: $(SOFILE) i18n
-
-### Implicit rules:
-
-%.o: %.c
- $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
-
-### Dependencies:
-
-MAKEDEP = $(CXX) -MM -MG
-DEPFILE = .dependencies
-$(DEPFILE): Makefile
- @$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-
--include $(DEPFILE)
-
-### Internationalization (I18N):
-
-PODIR = po
-I18Npo = $(wildcard $(PODIR)/*.po)
-I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
-I18Nmsgs = $(addprefix $(DESTDIR)$(LOCDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
-I18Npot = $(PODIR)/$(PLUGIN).pot
-
-%.mo: %.po
- msgfmt -c -o $@ $<
-
-$(I18Npot): $(wildcard *.c)
- xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^`
-
-%.po: $(I18Npot)
- msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
- @touch $@
-
-$(I18Nmsgs): $(DESTDIR)$(LOCDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
- install -D -m644 $< $@
-
-.PHONY: i18n
-i18n: $(I18Nmo) $(I18Npot)
-
-install-i18n: $(I18Nmsgs)
-
-### Targets:
-
-$(SOFILE): $(OBJS)
- $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
-
-install-lib: $(SOFILE)
- install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
-
-install: install-lib install-i18n
-
-dist: $(I18Npo) clean
- @-rm -rf $(TMPDIR)/$(ARCHIVE)
- @mkdir $(TMPDIR)/$(ARCHIVE)
- @cp -a * $(TMPDIR)/$(ARCHIVE)
- @tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE)
- @-rm -rf $(TMPDIR)/$(ARCHIVE)
- @echo Distribution package created as $(PACKAGE).tgz
-
-clean:
- @-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
- @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
diff --git a/skindesclient-0.0.1/README b/skindesclient-0.0.1/README
deleted file mode 100644
index 3b270ac..0000000
--- a/skindesclient-0.0.1/README
+++ /dev/null
@@ -1,16 +0,0 @@
-This is a "plugin" for the Video Disk Recorder (VDR).
-
-Written by: Louis Braun <louis.braun@gmx.de>
-
-Project's homepage: ---
-
-Latest version available at: ---
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-See the file COPYING for more information.
-
-Description: This is just an example how to use the skindesigner
-template engine with a VDR plugin
diff --git a/skindesclient-0.0.1/libskindesigner/services.h b/skindesclient-0.0.1/libskindesigner/services.h
deleted file mode 100644
index 0a016fa..0000000
--- a/skindesclient-0.0.1/libskindesigner/services.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef __SKINDESIGNERSERVICES_H
-#define __SKINDESIGNERSERVICES_H
-
-using namespace std;
-
-#include <string>
-#include <vector>
-#include <map>
-
-enum eMenuType {
- mtList,
- mtText
-};
-
-class cSDDisplayMenu : public cSkinDisplayMenu {
-public:
- virtual void SetTitle(const char *Title);
- virtual void SetPluginMenu(string name, int menu, int type, bool init);
- virtual bool SetItemPlugin(map<string,string> *stringTokens, map<string,int> *intTokens, map<string,vector<map<string,string> > > *loopTokens, int Index, bool Current, bool Selectable);
- virtual bool SetPluginText(map<string,string> *stringTokens, map<string,int> *intTokens, map<string,vector<map<string,string> > > *loopTokens);
-};
-
-/*********************************************************************
-* Data Structures for Service Calls
-*********************************************************************/
-
-// Data structure for service "RegisterPlugin"
-class RegisterPlugin {
-public:
- RegisterPlugin(void) {
- name = "";
- };
- void SetMenu(int key, string templateName) {
- menus.insert(pair<int, string>(key, templateName));
- }
-// in
- string name; //name of plugin
- map< int, string > menus; //menus as key -> templatename hashmap
-//out
-};
-
-// Data structure for service "GetDisplayMenu"
-class GetDisplayMenu {
-public:
- GetDisplayMenu(void) {
- displayMenu = NULL;
- };
-// in
-//out
- cSDDisplayMenu *displayMenu;
-};
-#endif //__SKINDESIGNERSERVICES_H \ No newline at end of file
diff --git a/skindesclient-0.0.1/osdmenu.c b/skindesclient-0.0.1/osdmenu.c
deleted file mode 100644
index e32b2d1..0000000
--- a/skindesclient-0.0.1/osdmenu.c
+++ /dev/null
@@ -1,148 +0,0 @@
-#include <vdr/osdbase.h>
-#include <string>
-#include <vector>
-#include <map>
-#include <set>
-#include <sstream>
-#include "libskindesigner/skindesignerosdbase.h"
-
-enum eMenus {
- meListMain,
- meListSub,
- meDetail
-};
-
-class cPlugOsdMenu : public cSkindesignerOsdMenu {
-private:
- void SetMenu(int numItems, bool subfolder = false);
- void SetDetailView(int element);
-public:
- cPlugOsdMenu(void);
- virtual ~cPlugOsdMenu();
- virtual eOSState ProcessKey(eKeys key);
-};
-
-
-//***************************************************************************
-// Public Functions
-//***************************************************************************
-
-cPlugOsdMenu::cPlugOsdMenu(void) : cSkindesignerOsdMenu("Skindesigner Client") {
- SetPluginName("skindesclient");
- SetMenu(10);
-}
-
-cPlugOsdMenu::~cPlugOsdMenu(void) {
-
-}
-
-eOSState cPlugOsdMenu::ProcessKey(eKeys key) {
- eOSState state = cOsdMenu::ProcessKey(key);
- switch (key) {
- case kOk: {
- int element = Current();
- if (element%2)
- SetDetailView(element);
- else
- SetMenu(25, true);
- state = osContinue;
- break;
- } case kLeft: {
- TextKeyLeft();
- state = osContinue;
- break;
- } case kRight: {
- TextKeyRight();
- state = osContinue;
- break;
- } case kUp: {
- TextKeyUp();
- state = osContinue;
- break;
- } case kDown: {
- TextKeyDown();
- state = osContinue;
- break;
- }
- default:
- break;
- }
- return state;
-}
-
-//***************************************************************************
-// Private Functions
-//***************************************************************************
-
-void cPlugOsdMenu::SetMenu(int numItems, bool subfolder) {
- eMenus menu = subfolder ? meListSub : meListMain;
- SetPluginMenu(menu, mtList);
- Clear();
-
- for (int i=0; i < numItems; i++) {
- cSkindesignerOsdItem *item = new cSkindesignerOsdItem();
- //add some tokens to the menu item
- stringstream text;
- if (i%2)
- text << "DetailItem" << (i+1);
- else
- text << "FolderItem" << (i+1);
- item->SetText(text.str().c_str());
- item->AddIntToken("itemnumber", i);
- item->AddStringToken("menuitemtext", text.str().c_str());
-
- stringstream text2;
- text2 << "CurrentItemText" << (i+1) << "\n";
- text2 << "CurrentItemText" << (i+1) << "\n";
- text2 << "CurrentItemText" << (i+1) << "\n";
- text2 << "CurrentItemText" << (i+1) << "\n";
- text2 << "CurrentItemText" << (i+1) << "\n";
- text2 << "CurrentItemText" << (i+1) << "\n";
- item->AddStringToken("currentitemtext", text2.str().c_str());
-
- //Loop Token Example
- for (int row=0; row<20; row++) {
- map<string, string> tokens;
- for (int col=0; col<3; col++) {
- stringstream key;
- stringstream value;
- key << "loop1[" << "col" << col << "]";
- value << "menuitem" << i << "-" << row << "x" << col;
- tokens.insert(pair<string,string>(key.str(), value.str()));
- }
- item->AddLoopToken("loop1", tokens);
- }
- //Add item
- bool current = (i==0)?true:false;
- Add(item, current);
- }
- SetHelp("Red", "Green", "Yellow", "Blue");
- Display();
-}
-
-void cPlugOsdMenu::SetDetailView(int element) {
- SetPluginMenu(meDetail, mtText);
- Clear();
- ClearTokens();
-
- SetText("Text to be displayed if skindesigner templates are not available");
-
- AddIntToken("menuitem", element);
- AddStringToken("tabtext", "String Token to be displayed if skindesigner template is available");
-
- //Loop Token Example
- for (int row=0; row<25; row++) {
- map<string, string> tokens;
- for (int col=0; col<10; col++) {
- stringstream key;
- stringstream value;
- key << "loop1[" << "col" << col << "]";
- value << "row" << row << "-" << "col" << "-" << col;
- tokens.insert(pair<string,string>(key.str(), value.str()));
- }
- AddLoopToken("loop1", tokens);
- }
-
- SetHelp("Red", "Green", "Yellow", "Blue");
- Display();
-}
diff --git a/skindesclient-0.0.1/skindesclient.c b/skindesclient-0.0.1/skindesclient.c
deleted file mode 100644
index 01bff96..0000000
--- a/skindesclient-0.0.1/skindesclient.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * skindesclient.c: A plugin for the Video Disk Recorder
- *
- * See the README file for copyright information and how to reach the author.
- *
- * $Id$
- */
-
-#include <vdr/plugin.h>
-#include "osdmenu.c"
-#include "libskindesigner/services.h"
-
-static const char *VERSION = "0.0.1";
-static const char *DESCRIPTION = "SkinDesigner Test Client";
-static const char *MAINMENUENTRY = "Skindesclient";
-
-class cPluginSkindesclient : public cPlugin {
-private:
- // Add any member variables or functions you may need here.
-public:
- cPluginSkindesclient(void);
- virtual ~cPluginSkindesclient();
- virtual const char *Version(void) { return VERSION; }
- virtual const char *Description(void) { return DESCRIPTION; }
- virtual const char *CommandLineHelp(void);
- virtual bool ProcessArgs(int argc, char *argv[]);
- virtual bool Initialize(void);
- virtual bool Start(void);
- virtual void Stop(void);
- virtual void Housekeeping(void);
- virtual void MainThreadHook(void);
- virtual cString Active(void);
- virtual time_t WakeupTime(void);
- virtual const char *MainMenuEntry(void) { return MAINMENUENTRY; }
- virtual cOsdObject *MainMenuAction(void);
- virtual cMenuSetupPage *SetupMenu(void);
- virtual bool SetupParse(const char *Name, const char *Value);
- virtual bool Service(const char *Id, void *Data = NULL);
- virtual const char **SVDRPHelpPages(void);
- virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
- };
-
-cPluginSkindesclient::cPluginSkindesclient(void)
-{
-
-}
-
-cPluginSkindesclient::~cPluginSkindesclient()
-{
-}
-
-const char *cPluginSkindesclient::CommandLineHelp(void)
-{
- return NULL;
-}
-
-bool cPluginSkindesclient::ProcessArgs(int argc, char *argv[])
-{
- return true;
-}
-
-bool cPluginSkindesclient::Initialize(void)
-{
- return true;
-}
-
-bool cPluginSkindesclient::Start(void)
-{
- RegisterPlugin reg;
- reg.name = "skindesclient";
- reg.SetMenu(meListMain, "menulistmain.xml");
- reg.SetMenu(meListSub, "menulistsub.xml");
- reg.SetMenu(meDetail, "menudetail.xml");
- static cPlugin *pSkinDesigner = cPluginManager::GetPlugin("skindesigner");
- if (pSkinDesigner) {
- bool ok = pSkinDesigner->Service("RegisterPlugin", &reg);
- } else {
- esyslog("skindesclient: skindesigner not available");
- }
- return true;
-}
-
-void cPluginSkindesclient::Stop(void)
-{
- // Stop any background activities the plugin is performing.
-}
-
-void cPluginSkindesclient::Housekeeping(void)
-{
- // Perform any cleanup or other regular tasks.
-}
-
-void cPluginSkindesclient::MainThreadHook(void)
-{
- // Perform actions in the context of the main program thread.
- // WARNING: Use with great care - see PLUGINS.html!
-}
-
-cString cPluginSkindesclient::Active(void)
-{
- // Return a message string if shutdown should be postponed
- return NULL;
-}
-
-time_t cPluginSkindesclient::WakeupTime(void)
-{
- // Return custom wakeup time for shutdown script
- return 0;
-}
-
-cOsdObject *cPluginSkindesclient::MainMenuAction(void)
-{
- cOsdObject *menu = new cPlugOsdMenu();
- return menu;
-}
-
-cMenuSetupPage *cPluginSkindesclient::SetupMenu(void)
-{
- // Return a setup menu in case the plugin supports one.
- return NULL;
-}
-
-bool cPluginSkindesclient::SetupParse(const char *Name, const char *Value)
-{
- // Parse your own setup parameters and store their values.
- return false;
-}
-
-bool cPluginSkindesclient::Service(const char *Id, void *Data)
-{
- // Handle custom service requests from other plugins
- return false;
-}
-
-const char **cPluginSkindesclient::SVDRPHelpPages(void)
-{
- // Return help text for SVDRP commands this plugin implements
- return NULL;
-}
-
-cString cPluginSkindesclient::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
-{
- // Process SVDRP commands this plugin implements
- return NULL;
-}
-
-VDRPLUGINCREATOR(cPluginSkindesclient); // Don't touch this!
diff --git a/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menudetail.xml b/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menudetail.xml
deleted file mode 100644
index 82f13ab..0000000
--- a/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menudetail.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE menuplugin SYSTEM "../../../dtd/displaymenuplugin.dtd">
-
-<menuplugin x="0" y="0" width="100%" height="100%" fadetime="0">
- <background>
- <area x="0" y="0" width="100%" height="100%" layer="1">
- <fill color="{clrTransBlack}" />
- </area>
- </background>
- <!-- dummyheader -->
- <header>
- <area x="0" y="0" width="1" height="1" layer="1">
- <fill color="{clrTransparent}" />
- </area>
- </header>
- <datetime>
- <area x="0" y="0" width="1" height="1" layer="1">
- <fill color="{clrTransparent}" />
- </area>
- </datetime>
- <colorbuttons>
- </colorbuttons>
- <!-- Available Variables in detail header:
- {menuitem} Number of menu item element from list
- {tabtext} Text for Tab
- -->
- <detailheader>
- <area x="0" y="0" width="100%" height="20%" layer="2">
- <fill color="{clrTransBlueLight}" />
- </area>
- <area x="0" y="0" width="100%" height="20%" layer="3">
- <drawtext x="20" valign="center" font="{light}" fontsize="40%" color="{clrWhite}" text="Header for menuitem {menuitem} detailed information" />
- </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}" />
- <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 tab elements:
- {menuitem} Number of menu item element from list
- {tabtext} Text for Tab
- {loop1[]} test array
- {loop1[col0]} test array first col
- ...
- {loop1[col3]} test array fourth col
- -->
- <!-- TAB TEST1 -->
- <tab name="Test1" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
- <drawtextbox x="0" y="0" width="96%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tabtext}" />
- </tab>
- <!-- TAB TEST2 -->
- <tab name="Test2" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
- <drawtext x="10" y="0" width="96%" font="{light}" fontsize="8%" color="{clrWhite}" text="{tabtext}" />
- <loop name="loop1" x="0" y="9%" width="{areawidth} - 40" orientation="vertical">
- <drawtext x="20" y="0" width="{areawidth} - 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{loop1[col0]} {loop1[col1]} {loop1[col2]} {loop1[col3]}" />
- </loop>
- </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">
- <drawrectangle condition="{tabs[current]}" x="0" y="0" width="{width(label)}" height="100%" color="{clrTransBlueLight}" />
- <drawrectangle condition="not{tabs[current]}" x="0" y="0" width="{width(label)}" height="100%" color="{clrTransBlueLight}" />
- <drawrectangle condition="not{tabs[current]}" x="2" y="2" width="{width(label)} - 4" height="{areaheight}-4" color="{clrTransparent}" />
- <drawtext name="label" x="0" valign="center" font="{light}" fontsize="95%" color="{clrWhite}" text=" {tabs[title]} " />
- </loop>
- </area>
- </tablabels>
-</menuplugin> \ No newline at end of file
diff --git a/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistmain.xml b/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistmain.xml
deleted file mode 100644
index 2d88c32..0000000
--- a/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistmain.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE menuplugin SYSTEM "../../../dtd/displaymenuplugin.dtd">
-
-<menuplugin 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
- -->
- <header>
- </header>
-
- <menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="6">
- <!-- Available Variables schedules menu listelement:
- {nummenuitem} number of item in list, starts with 1
- {current}
- {separator}
- {itemnumber}
- {menuitemtext}
- {currentitemtext}
- -->
- <listelement>
- <!-- Background -->
- <area x="1%" width="58%" layer="2">
- <fill condition="not{current}" color="{clrTransparent}" />
- <fill condition="{current}" color="{clrTransBlueLight}" />
- </area>
- <area x="1%" width="58%" layer="3">
- <drawtext x="10" valign="center" font="{light}" fontsize="95%" color="{clrWhite}" text="{itemnumber} {menuitemtext}" />
- </area>
- </listelement>
- <!-- additional element which is drawn for current element -->
- <!-- Available Variables schedules menu currentelement:
- {itemnumber}
- {menuitemtext}
- {currentitemtext}
- {loop1[]} test array
- {loop1[col0]} test array first col
- ...
- {loop1[col2]} test array third col
- -->
- <currentelement delay="500" fadetime="0">
- <area x="63%" y="0" width="36%" height="85%" layer="3">
- <drawtext align="center" y="0" font="{semibold}" width="{areawidth}-20" fontsize="15%" color="{clrWhite}" text="{itemnumber}" />
- <drawtext align="center" y="15%" font="{semibold}" width="{areawidth}-20" fontsize="8%" color="{clrWhite}" text="{menuitemtext}" />
- <drawtextbox x="10" y="{areaheight}/3" width="{areawidth}-20" font="{light}" fontsize="{areaheight}/15" color="{clrWhite}" text="{currentitemtext}" />
- </area>
- <areascroll mode="carriagereturn" orientation="vertical" delay="1000" scrollspeed="medium" x="63%" y="85%" width="36%" height="15%" layer="3">
- <loop name="loop1" x="0" y="0" orientation="vertical">
- <drawtext x="10" font="{light}" width="{areawidth}-20" fontsize="20%" color="{clrWhite}" text="{loop1[col0]} {loop1[col1]} {loop1[col2]}" />
- </loop>
- </areascroll>
- </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}" />
- <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>
-</menuplugin> \ No newline at end of file
diff --git a/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistsub.xml b/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistsub.xml
deleted file mode 100644
index acc3341..0000000
--- a/skindesclient-0.0.1/templates-metrixhd/plug-skindesclient-menulistsub.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE menuplugin SYSTEM "../../../dtd/displaymenuplugin.dtd">
-
-<menuplugin 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
- -->
- <header>
- </header>
-
- <menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" numlistelements="12">
- <!-- Available Variables schedules menu listelement:
- {nummenuitem} number of item in list, starts with 1
- {current}
- {separator}
- {itemnumber}
- {menuitemtext}
- {currentitemtext}
- -->
- <listelement>
- <!-- Background -->
- <area x="1%" width="58%" layer="2">
- <fill condition="not{current}" color="{clrTransparent}" />
- <fill condition="{current}" color="{clrTransBlueLight}" />
- </area>
- <area x="1%" width="58%" layer="3">
- <drawtext x="10" valign="center" font="{light}" fontsize="95%" color="{clrWhite}" text="{itemnumber} {menuitemtext}" />
- </area>
- </listelement>
- <!-- additional element which is drawn for current element -->
- <!-- Available Variables schedules menu currentelement:
- {itemnumber}
- {menuitemtext}
- {currentitemtext}
- {loop1[]} test array
- {loop1[col0]} test array first col
- ...
- {loop1[col2]} test array third col
- -->
- <currentelement delay="500" fadetime="0">
- <area x="63%" y="0" width="36%" height="85%" layer="3">
- <drawtext align="center" y="0" font="{semibold}" width="{areawidth}-20" fontsize="15%" color="{clrWhite}" text="{itemnumber}" />
- <drawtext align="center" y="15%" font="{semibold}" width="{areawidth}-20" fontsize="8%" color="{clrWhite}" text="{menuitemtext}" />
- <drawtextbox x="10" y="{areaheight}/3" width="{areawidth}-20" font="{light}" fontsize="{areaheight}/15" color="{clrWhite}" text="{currentitemtext}" />
- </area>
- <areascroll mode="carriagereturn" orientation="vertical" delay="1000" scrollspeed="medium" x="63%" y="85%" width="36%" height="15%" layer="3">
- <loop name="loop1" x="0" y="0" orientation="vertical">
- <drawtext x="10" font="{light}" width="{areawidth}-20" fontsize="20%" color="{clrWhite}" text="{loop1[col0]} {loop1[col1]} {loop1[col2]}" />
- </loop>
- </areascroll>
- </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}" />
- <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>
-</menuplugin> \ No newline at end of file
diff --git a/skindesigner.c b/skindesigner.c
index dff54a7..36d9387 100644
--- a/skindesigner.c
+++ b/skindesigner.c
@@ -19,7 +19,7 @@
#endif
-static const char *VERSION = "0.2.2";
+static const char *VERSION = "0.3.0";
static const char *DESCRIPTION = trNOOP("Skin Designer");
class cPluginSkinDesigner : public cPlugin {
@@ -168,7 +168,7 @@ bool cPluginSkinDesigner::Service(const char *Id, void *Data) {
return false;
}
config.AddPluginMenus(call->name, call->menus);
- config.AddPluginViews(call->name, call->views, call->viewElements, call->viewGrids);
+ config.AddPluginViews(call->name, call->views, call->subViews, call->viewElements, call->viewGrids);
if (call->menus.size() > 0)
dsyslog("skindesigner: plugin %s has registered %ld menus", call->name.c_str(), call->menus.size());
if (call->views.size() > 0)
@@ -195,7 +195,7 @@ bool cPluginSkinDesigner::Service(const char *Id, void *Data) {
cSkin *current = Skins.Current();
for (vector<cSkinDesigner*>::iterator skin = skins.begin(); skin != skins.end(); skin++) {
if (*skin == current) {
- cSkinDisplayPlugin *displayPlugin = (*skin)->DisplayPlugin(call->pluginName, call->viewID);
+ cSkinDisplayPlugin *displayPlugin = (*skin)->DisplayPlugin(call->pluginName, call->viewID, call->subViewID);
if (displayPlugin) {
call->displayPlugin = displayPlugin;
return true;
diff --git a/skins/blackhole/themes/default/icons/ico_activetimer.png b/skins/blackhole/themes/default/icons/ico_activetimer.png
new file mode 100644
index 0000000..af4c33c
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_activetimer.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_arrow_left.png b/skins/blackhole/themes/default/icons/ico_arrow_left.png
new file mode 100644
index 0000000..57800c7
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_arrow_left.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_arrow_right.png b/skins/blackhole/themes/default/icons/ico_arrow_right.png
new file mode 100644
index 0000000..ea45f3a
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_arrow_right.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_delete_active.png b/skins/blackhole/themes/default/icons/ico_delete_active.png
new file mode 100644
index 0000000..f473717
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_delete_active.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_delete_inactive.png b/skins/blackhole/themes/default/icons/ico_delete_inactive.png
new file mode 100644
index 0000000..21b0a88
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_delete_inactive.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_edit_active.png b/skins/blackhole/themes/default/icons/ico_edit_active.png
new file mode 100644
index 0000000..ec39699
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_edit_active.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_edit_inactive.png b/skins/blackhole/themes/default/icons/ico_edit_inactive.png
new file mode 100644
index 0000000..71f016c
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_edit_inactive.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_info_active.png b/skins/blackhole/themes/default/icons/ico_info_active.png
new file mode 100644
index 0000000..c88f76d
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_info_active.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_info_inactive.png b/skins/blackhole/themes/default/icons/ico_info_inactive.png
new file mode 100644
index 0000000..37eeed2
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_info_inactive.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_no.png b/skins/blackhole/themes/default/icons/ico_no.png
new file mode 100644
index 0000000..47cdba0
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_no.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_record_active.png b/skins/blackhole/themes/default/icons/ico_record_active.png
new file mode 100644
index 0000000..476da99
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_record_active.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_record_inactive.png b/skins/blackhole/themes/default/icons/ico_record_inactive.png
new file mode 100644
index 0000000..2a91da3
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_record_inactive.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_search_active.png b/skins/blackhole/themes/default/icons/ico_search_active.png
new file mode 100644
index 0000000..7bf7bc7
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_search_active.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_search_inactive.png b/skins/blackhole/themes/default/icons/ico_search_inactive.png
new file mode 100644
index 0000000..4a210bb
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_search_inactive.png
Binary files differ
diff --git a/skins/blackhole/themes/default/icons/ico_switchtimer.svg b/skins/blackhole/themes/default/icons/ico_switchtimer.svg
new file mode 100644
index 0000000..533305d
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_switchtimer.svg
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="50"
+ height="50"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91pre2 r13516"
+ viewBox="0 0 49.999999 50.000001"
+ sodipodi:docname="ico_switchtimer.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4240">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4242" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4244" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4214">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop4216" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1"
+ id="stop4218" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4173">
+ <stop
+ style="stop-color:#2c4255;stop-opacity:1;"
+ offset="0"
+ id="stop4175" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1"
+ id="stop4177" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4173"
+ id="linearGradient4179"
+ x1="6.1765633"
+ y1="1047.7924"
+ x2="39.66613"
+ y2="1009.4264"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4214"
+ id="linearGradient4220"
+ x1="8.7948284"
+ y1="1042.3796"
+ x2="43.393124"
+ y2="1014.2346"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4240"
+ id="radialGradient4246"
+ cx="42.006367"
+ cy="1003.2948"
+ fx="42.006367"
+ fy="1003.2948"
+ r="23.434333"
+ gradientTransform="translate(0,-8.3618257e-5)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4214"
+ id="linearGradient4155"
+ gradientUnits="userSpaceOnUse"
+ x1="8.7948284"
+ y1="1042.3796"
+ x2="43.393124"
+ y2="1014.2346"
+ gradientTransform="matrix(1.0231507,0,0,1.0231507,-0.57876763,-23.784214)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.055058"
+ inkscape:cx="-0.844769"
+ inkscape:cy="23.850628"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1846"
+ inkscape:window-height="1058"
+ inkscape:window-x="66"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1002.3622)">
+ <circle
+ style="opacity:1;fill:#ff7f2a;fill-opacity:1;stroke:url(#linearGradient4155);stroke-width:2.046;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4196"
+ cy="1027.3622"
+ cx="25"
+ r="23.976849"
+ d="M 48.976849,1027.3622 A 23.976849,23.976849 0 0 1 25,1051.339 23.976849,23.976849 0 0 1 1.0231514,1027.3622 23.976849,23.976849 0 0 1 25,1003.3853 a 23.976849,23.976849 0 0 1 23.976849,23.9769 z" />
+ <ellipse
+ cx="25"
+ cy="1027.3623"
+ rx="23.434328"
+ ry="23.43433"
+ id="ellipse4226"
+ style="opacity:1;fill:url(#radialGradient4246);fill-opacity:1;stroke:url(#linearGradient4220);stroke-width:0;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 48.434328,1027.3623 A 23.434328,23.43433 0 0 1 25,1050.7966 23.434328,23.43433 0 0 1 1.5656719,1027.3623 23.434328,23.43433 0 0 1 25,1003.928 a 23.434328,23.43433 0 0 1 23.434328,23.4343 z" />
+ <path
+ style="opacity:0.75;fill:#cccccc;fill-opacity:1;stroke:url(#linearGradient4179);stroke-width:2.0349884;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4137"
+ r="23.982506"
+ cy="1027.3622"
+ cx="24.999998" />
+ <ellipse
+ style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:#00ffff;stroke-width:2.0599978;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4164"
+ cx="24.99999"
+ cy="1027.3622"
+ r="23.970001" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/icons/ico_yes.png b/skins/blackhole/themes/default/icons/ico_yes.png
new file mode 100644
index 0000000..2f1af98
--- /dev/null
+++ b/skins/blackhole/themes/default/icons/ico_yes.png
Binary files differ
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_grid_active_hor.svg b/skins/blackhole/themes/default/skinparts/tvguide_grid_active_hor.svg
new file mode 100644
index 0000000..5ca5628
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_grid_active_hor.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="300"
+ height="90"
+ viewBox="0 0 300 90"
+ id="svg10995"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_grid_active.svg">
+ <defs
+ id="defs10997">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11586" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11588" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11572" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11574" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11576"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150"
+ gradientTransform="matrix(1,0,0,0.00333333,0,1048.356)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00333333,0,959.35596)"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11590"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,90,0,-89655.234)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,90,299,-89655.234)"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5" />
+ <linearGradient
+ gradientTransform="matrix(0.29739198,0,0,1.2857141,-7.7321871,756.64803)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient5073"
+ id="linearGradient5079"
+ x1="571.08295"
+ y1="223.60255"
+ x2="573.04272"
+ y2="164.76302"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5073">
+ <stop
+ style="stop-color:#00284a;stop-opacity:1;"
+ offset="0"
+ id="stop5075" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1"
+ id="stop5077" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.502027"
+ inkscape:cx="168.30828"
+ inkscape:cy="138.77937"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11000">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-962.36218)">
+ <rect
+ style="display:inline;opacity:1;fill:url(#linearGradient5079);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4576"
+ width="300"
+ height="89.999992"
+ x="4.9999999e-006"
+ y="962.36218"
+ ry="0.13425298" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11576);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11568"
+ width="300"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="962.36218"
+ x="0"
+ height="1"
+ width="300"
+ id="rect11578"
+ style="opacity:1;fill:url(#radialGradient11580);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11590);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11582"
+ width="1"
+ height="90"
+ x="0"
+ y="962.36218" />
+ <rect
+ y="962.36218"
+ x="299"
+ height="90"
+ width="1"
+ id="rect11592"
+ style="opacity:1;fill:url(#radialGradient11594);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#000000;fill-opacity:0;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4166"
+ width="364.90414"
+ height="161.46909"
+ x="-51.15852"
+ y="910.07751" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_grid_active_ver.svg b/skins/blackhole/themes/default/skinparts/tvguide_grid_active_ver.svg
new file mode 100644
index 0000000..dccad1b
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_grid_active_ver.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="300"
+ height="300"
+ viewBox="0 0 300 300"
+ id="svg10995"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_grid_active_ver.svg">
+ <defs
+ id="defs10997">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11586" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11588" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11572" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11574" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11576"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150"
+ gradientTransform="matrix(1,0,0,0.00333333,0,1048.356)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00333333,0,749.35595)"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11590"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,300,0,-301306.29)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,300,299,-301306.29)"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5" />
+ <linearGradient
+ gradientTransform="matrix(0.29739197,0,0,4.2857138,-7.7321827,66.64835)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient5073"
+ id="linearGradient5079"
+ x1="571.08295"
+ y1="223.60255"
+ x2="578.41846"
+ y2="158.79453"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5073">
+ <stop
+ style="stop-color:#00284a;stop-opacity:1;"
+ offset="0"
+ id="stop5075" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1"
+ id="stop5077" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.502027"
+ inkscape:cx="104.75981"
+ inkscape:cy="167.10004"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11000">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-752.36218)">
+ <rect
+ style="display:inline;opacity:1;fill:url(#linearGradient5079);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4576"
+ width="300"
+ height="299.99997"
+ x="9.1287093e-006"
+ y="752.36218"
+ ry="0.44750994" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11576);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11568"
+ width="300"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="752.36218"
+ x="0"
+ height="1"
+ width="300"
+ id="rect11578"
+ style="opacity:1;fill:url(#radialGradient11580);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11590);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11582"
+ width="1"
+ height="300"
+ x="0"
+ y="752.36218" />
+ <rect
+ y="752.36218"
+ x="299"
+ height="300"
+ width="1"
+ id="rect11592"
+ style="opacity:1;fill:url(#radialGradient11594);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#000000;fill-opacity:0;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4166"
+ width="364.90414"
+ height="161.46909"
+ x="-51.15852"
+ y="910.07751" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_grid_bright_hor.svg b/skins/blackhole/themes/default/skinparts/tvguide_grid_bright_hor.svg
new file mode 100644
index 0000000..2451550
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_grid_bright_hor.svg
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="300"
+ height="90"
+ viewBox="0 0 300 90"
+ id="svg10995"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_grid_bright.svg">
+ <defs
+ id="defs10997">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11586" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11588" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11572" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11574" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11560">
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0"
+ id="stop11562" />
+ <stop
+ style="stop-color:#444444;stop-opacity:1"
+ offset="1"
+ id="stop11564" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11560"
+ id="linearGradient11566"
+ x1="4.3964353"
+ y1="1040.9349"
+ x2="295.20389"
+ y2="978.58551"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11576"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150"
+ gradientTransform="matrix(1,0,0,0.00333333,0,1048.356)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00333333,0,959.35596)"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11590"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,90,0,-89655.234)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,90,299,-89655.234)"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.502027"
+ inkscape:cx="107.8801"
+ inkscape:cy="42.857143"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11000">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-962.36218)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient11566);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11543"
+ width="300"
+ height="90"
+ x="0"
+ y="962.36218" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11576);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11568"
+ width="300"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="962.36218"
+ x="0"
+ height="1"
+ width="300"
+ id="rect11578"
+ style="opacity:1;fill:url(#radialGradient11580);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11590);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11582"
+ width="1"
+ height="90"
+ x="0"
+ y="962.36218" />
+ <rect
+ y="962.36218"
+ x="299"
+ height="90"
+ width="1"
+ id="rect11592"
+ style="opacity:1;fill:url(#radialGradient11594);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_grid_bright_ver.svg b/skins/blackhole/themes/default/skinparts/tvguide_grid_bright_ver.svg
new file mode 100644
index 0000000..a4ee2c5
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_grid_bright_ver.svg
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="300"
+ height="300"
+ viewBox="0 0 300 300"
+ id="svg10995"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_grid_bright_ver.svg">
+ <defs
+ id="defs10997">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11586" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11588" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11572" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11574" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11560">
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0"
+ id="stop11562" />
+ <stop
+ style="stop-color:#444444;stop-opacity:1"
+ offset="1"
+ id="stop11564" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11560"
+ id="linearGradient11566"
+ x1="4.3964353"
+ y1="1040.9349"
+ x2="295.20389"
+ y2="978.58551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.3333333,0,-2455.5118)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11576"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150"
+ gradientTransform="matrix(1,0,0,0.00333333,0,1048.356)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00333333,0,749.35596)"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11590"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,300,0,-301306.29)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,300,299,-301306.29)"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.502027"
+ inkscape:cx="131.96205"
+ inkscape:cy="138.77937"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11000">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-752.36218)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient11566);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11543"
+ width="300"
+ height="300"
+ x="0"
+ y="752.36218" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11576);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11568"
+ width="300"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="752.36218"
+ x="0"
+ height="1"
+ width="300"
+ id="rect11578"
+ style="opacity:1;fill:url(#radialGradient11580);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11590);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11582"
+ width="1"
+ height="300"
+ x="0"
+ y="752.36218" />
+ <rect
+ y="752.36218"
+ x="299"
+ height="300"
+ width="1"
+ id="rect11592"
+ style="opacity:1;fill:url(#radialGradient11594);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_grid_dark_hor.svg b/skins/blackhole/themes/default/skinparts/tvguide_grid_dark_hor.svg
new file mode 100644
index 0000000..7208924
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_grid_dark_hor.svg
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="300"
+ height="90"
+ viewBox="0 0 300 90"
+ id="svg10995"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_grid_dark.svg">
+ <defs
+ id="defs10997">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11586" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11588" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11572" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11574" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11560">
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0"
+ id="stop11562" />
+ <stop
+ style="stop-color:#222222;stop-opacity:1"
+ offset="1"
+ id="stop11564" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11560"
+ id="linearGradient11566"
+ x1="1.9983797"
+ y1="1039.736"
+ x2="297.60196"
+ y2="977.38647"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11576"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150"
+ gradientTransform="matrix(1,0,0,0.00333333,0,1048.356)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00333333,0,959.35596)"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11590"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,90,0,-89655.234)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,90,299,-89655.234)"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.502027"
+ inkscape:cx="107.8801"
+ inkscape:cy="42.857143"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11000">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-962.36218)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient11566);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11543"
+ width="300"
+ height="90"
+ x="0"
+ y="962.36218" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11576);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11568"
+ width="300"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="962.36218"
+ x="0"
+ height="1"
+ width="300"
+ id="rect11578"
+ style="opacity:1;fill:url(#radialGradient11580);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11590);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11582"
+ width="1"
+ height="90"
+ x="0"
+ y="962.36218" />
+ <rect
+ y="962.36218"
+ x="299"
+ height="90"
+ width="1"
+ id="rect11592"
+ style="opacity:1;fill:url(#radialGradient11594);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_grid_dark_ver.svg b/skins/blackhole/themes/default/skinparts/tvguide_grid_dark_ver.svg
new file mode 100644
index 0000000..bef7868
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_grid_dark_ver.svg
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="300"
+ height="300"
+ viewBox="0 0 300 300"
+ id="svg10995"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_grid_dark_ver.svg">
+ <defs
+ id="defs10997">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11584">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11586" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11588" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11570">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop11572" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop11574" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11560">
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0"
+ id="stop11562" />
+ <stop
+ style="stop-color:#222222;stop-opacity:1"
+ offset="1"
+ id="stop11564" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11560"
+ id="linearGradient11566"
+ x1="1.9983797"
+ y1="1039.736"
+ x2="297.60196"
+ y2="977.38647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.3333333,0,-2455.5118)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11576"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150"
+ gradientTransform="matrix(1,0,0,0.00333333,0,1048.356)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11570"
+ id="radialGradient11580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00333333,0,749.35596)"
+ cx="150"
+ cy="1051.8622"
+ fx="150"
+ fy="1051.8622"
+ r="150" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11590"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5"
+ gradientTransform="matrix(1.1,0,0,300,0,-301306.29)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11584"
+ id="radialGradient11594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,300,299,-301306.29)"
+ cx="0.5"
+ cy="1007.3622"
+ fx="0.5"
+ fy="1007.3622"
+ r="0.5" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.502027"
+ inkscape:cx="140.90371"
+ inkscape:cy="42.857143"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata11000">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-752.36218)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient11566);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11543"
+ width="300"
+ height="300"
+ x="0"
+ y="752.36218" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11576);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11568"
+ width="300"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="752.36218"
+ x="0"
+ height="1"
+ width="300"
+ id="rect11578"
+ style="opacity:1;fill:url(#radialGradient11580);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient11590);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect11582"
+ width="1.1"
+ height="300"
+ x="0"
+ y="752.36218" />
+ <rect
+ y="752.36218"
+ x="299"
+ height="300"
+ width="1"
+ id="rect11592"
+ style="opacity:1;fill:url(#radialGradient11594);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_hor.svg b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_hor.svg
new file mode 100644
index 0000000..b3bd1c6
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_hor.svg
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="220"
+ height="54"
+ viewBox="0 0 220 54.000001"
+ id="svg10367"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_timelinegrid_bright.svg">
+ <defs
+ id="defs10369">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10951">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop10953" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop10955" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10937">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop10939" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop10941" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10925">
+ <stop
+ style="stop-color:#aaaaaa;stop-opacity:1"
+ offset="0"
+ id="stop10927" />
+ <stop
+ style="stop-color:#dddddd;stop-opacity:1"
+ offset="1"
+ id="stop10929" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10925"
+ id="linearGradient10931"
+ x1="0.45233849"
+ y1="1025.76"
+ x2="220.45234"
+ y2="1025.76"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.45233849,-0.39786977)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10937"
+ id="radialGradient10943"
+ cx="110"
+ cy="1051.8622"
+ fx="110"
+ fy="1051.8622"
+ r="110"
+ gradientTransform="matrix(1,0,0,0.00454545,0,1047.081)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10937"
+ id="radialGradient10947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00454545,0,994.08096)"
+ cx="110"
+ cy="1051.8622"
+ fx="110"
+ fy="1051.8622"
+ r="110" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10951"
+ id="radialGradient10957"
+ cx="0.5"
+ cy="1025.3621"
+ fx="0.5"
+ fy="1025.3621"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,54,0,-54344.192)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10951"
+ id="radialGradient10961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,54,219,-54344.192)"
+ cx="0.5"
+ cy="1025.3621"
+ fx="0.5"
+ fy="1025.3621"
+ r="0.5" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.4214676"
+ inkscape:cx="113.12449"
+ inkscape:cy="43.594485"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata10372">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-998.36214)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient10931);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10915"
+ width="220"
+ height="54"
+ x="0"
+ y="998.36212" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10943);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10935"
+ width="220"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="998.36212"
+ x="0"
+ height="1"
+ width="220"
+ id="rect10945"
+ style="opacity:1;fill:url(#radialGradient10947);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10957);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10949"
+ width="1"
+ height="54"
+ x="0"
+ y="998.36212" />
+ <rect
+ y="998.36212"
+ x="219"
+ height="54"
+ width="1"
+ id="rect10959"
+ style="opacity:1;fill:url(#radialGradient10961);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_ver.svg b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_ver.svg
new file mode 100644
index 0000000..e170a67
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_bright_ver.svg
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="150"
+ height="75"
+ viewBox="0 0 150 75.000001"
+ id="svg10367"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_timelinegrid_bright_ver.svg">
+ <defs
+ id="defs10369">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10951">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop10953" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop10955" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10937">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop10939" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop10941" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10925">
+ <stop
+ style="stop-color:#aaaaaa;stop-opacity:1"
+ offset="0"
+ id="stop10927" />
+ <stop
+ style="stop-color:#dddddd;stop-opacity:1"
+ offset="1"
+ id="stop10929" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10925"
+ id="linearGradient10931"
+ x1="0.45233849"
+ y1="1025.76"
+ x2="220.45235"
+ y2="1025.76"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.68181818,0,0,1.3888889,-0.30841261,-409.80453)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10937"
+ id="radialGradient10943"
+ cx="110"
+ cy="1051.8622"
+ fx="110"
+ fy="1051.8622"
+ r="110"
+ gradientTransform="matrix(0.68181818,0,0,0.00454545,0,1047.081)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10937"
+ id="radialGradient10947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.68181818,0,0,0.00454545,0,973.08098)"
+ cx="110"
+ cy="1051.8622"
+ fx="110"
+ fy="1051.8622"
+ r="110" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10951"
+ id="radialGradient10957"
+ cx="0.5"
+ cy="1025.3621"
+ fx="0.5"
+ fy="1025.3621"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,75,0,-75887.296)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10951"
+ id="radialGradient10961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,75,149,-75887.296)"
+ cx="0.5"
+ cy="1025.3621"
+ fx="0.5"
+ fy="1025.3621"
+ r="0.5" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.4214676"
+ inkscape:cx="109.67027"
+ inkscape:cy="34.547715"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ borderlayer="true" />
+ <metadata
+ id="metadata10372">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-977.36214)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient10931);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10915"
+ width="150"
+ height="75"
+ x="0"
+ y="977.36212" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10943);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10935"
+ width="150"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="977.36212"
+ x="0"
+ height="1"
+ width="150"
+ id="rect10945"
+ style="opacity:1;fill:url(#radialGradient10947);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10957);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10949"
+ width="1"
+ height="75"
+ x="0"
+ y="977.36212" />
+ <rect
+ y="977.36212"
+ x="149"
+ height="75"
+ width="1"
+ id="rect10959"
+ style="opacity:1;fill:url(#radialGradient10961);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_hor.svg b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_hor.svg
new file mode 100644
index 0000000..cf20435
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_hor.svg
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="220"
+ height="54"
+ viewBox="0 0 220 54.000001"
+ id="svg10367"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_timelinegrid_dark.svg">
+ <defs
+ id="defs10369">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10987">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10989" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10991" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10979">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10981" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10983" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10971">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10973" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10975" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10963">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10965" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10967" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10925">
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0"
+ id="stop10927" />
+ <stop
+ style="stop-color:#444444;stop-opacity:1"
+ offset="1"
+ id="stop10929" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10925"
+ id="linearGradient10931"
+ x1="0.45233849"
+ y1="1025.76"
+ x2="220.45234"
+ y2="1025.76"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.45233849,-0.39786977)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10963"
+ id="radialGradient10969"
+ cx="110"
+ cy="998.86212"
+ fx="110"
+ fy="998.86212"
+ r="110"
+ gradientTransform="matrix(1,0,0,0.00454545,0,994.32184)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10971"
+ id="radialGradient10977"
+ cx="219.5"
+ cy="1025.3621"
+ fx="219.5"
+ fy="1025.3621"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,54,0,-54344.192)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10979"
+ id="radialGradient10985"
+ cx="110"
+ cy="1051.8622"
+ fx="110"
+ fy="1051.8622"
+ r="110"
+ gradientTransform="matrix(1,0,0,0.00454545,0,1047.081)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10987"
+ id="radialGradient10993"
+ cx="0.5"
+ cy="1025.3621"
+ fx="0.5"
+ fy="1025.3621"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,54,0,-54344.192)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.4214676"
+ inkscape:cx="113.12449"
+ inkscape:cy="43.594485"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata10372">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-998.36214)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient10931);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10915"
+ width="220"
+ height="54"
+ x="0"
+ y="998.36212" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10985);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10935"
+ width="220"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="998.36212"
+ x="0"
+ height="1"
+ width="220"
+ id="rect10945"
+ style="opacity:1;fill:url(#radialGradient10969);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10993);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10949"
+ width="1"
+ height="54"
+ x="0"
+ y="998.36212" />
+ <rect
+ y="998.36212"
+ x="219"
+ height="54"
+ width="1"
+ id="rect10959"
+ style="opacity:1;fill:url(#radialGradient10977);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_ver.svg b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_ver.svg
new file mode 100644
index 0000000..7ea3449
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguide_timelinegrid_dark_ver.svg
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="150"
+ height="75"
+ viewBox="0 0 150 75.000001"
+ id="svg10367"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguide_timelinegrid_dark_ver.svg">
+ <defs
+ id="defs10369">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10987">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10989" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10991" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10979">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10981" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10983" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10971">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10973" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10975" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10963">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop10965" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop10967" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10925">
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="0"
+ id="stop10927" />
+ <stop
+ style="stop-color:#444444;stop-opacity:1"
+ offset="1"
+ id="stop10929" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10925"
+ id="linearGradient10931"
+ x1="0.45233849"
+ y1="1025.76"
+ x2="220.45235"
+ y2="1025.76"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.68181818,0,0,1.3888889,-0.30841261,-409.80453)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10963"
+ id="radialGradient10969"
+ cx="110"
+ cy="998.86212"
+ fx="110"
+ fy="998.86212"
+ r="110"
+ gradientTransform="matrix(0.68181818,0,0,0.00454545,0,973.32186)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10971"
+ id="radialGradient10977"
+ cx="219.5"
+ cy="1025.3621"
+ fx="219.5"
+ fy="1025.3621"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,75,-70,-75887.296)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10979"
+ id="radialGradient10985"
+ cx="110"
+ cy="1051.8622"
+ fx="110"
+ fy="1051.8622"
+ r="110"
+ gradientTransform="matrix(0.68181818,0,0,0.00454545,0,1047.081)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10987"
+ id="radialGradient10993"
+ cx="0.5"
+ cy="1025.3621"
+ fx="0.5"
+ fy="1025.3621"
+ r="0.5"
+ gradientTransform="matrix(1,0,0,75,0,-75887.296)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.4214676"
+ inkscape:cx="95.855427"
+ inkscape:cy="43.594485"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata10372">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-977.36214)">
+ <rect
+ style="opacity:1;fill:url(#linearGradient10931);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10915"
+ width="150"
+ height="75"
+ x="0"
+ y="977.36212" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10985);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10935"
+ width="150"
+ height="1"
+ x="0"
+ y="1051.3622" />
+ <rect
+ y="977.36212"
+ x="0"
+ height="1"
+ width="150"
+ id="rect10945"
+ style="opacity:1;fill:url(#radialGradient10969);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient10993);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect10949"
+ width="1"
+ height="75"
+ x="0"
+ y="977.36212" />
+ <rect
+ y="977.36212"
+ x="149"
+ height="75"
+ width="1"
+ id="rect10959"
+ style="opacity:1;fill:url(#radialGradient10977);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/skinparts/tvguideheader.svg b/skins/blackhole/themes/default/skinparts/tvguideheader.svg
new file mode 100644
index 0000000..15d8a00
--- /dev/null
+++ b/skins/blackhole/themes/default/skinparts/tvguideheader.svg
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1920"
+ height="216"
+ viewBox="0 0 1920 216"
+ id="svg8417"
+ version="1.1"
+ inkscape:version="0.91pre3 r13670"
+ sodipodi:docname="tvguideheader.svg">
+ <defs
+ id="defs8419">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8989">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop8991" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop8993" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8975">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8977" />
+ <stop
+ style="stop-color:#999999;stop-opacity:1"
+ offset="1"
+ id="stop8979" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8975"
+ id="linearGradient8981"
+ x1="0.7203052"
+ y1="946.20978"
+ x2="2208.1833"
+ y2="857.31635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-2.0203052,-838.20978)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8989"
+ id="radialGradient8995"
+ cx="1199"
+ cy="944.79773"
+ fx="1199"
+ fy="944.79773"
+ r="1"
+ gradientTransform="matrix(1,0,0,100,0,-93534.975)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8989"
+ id="radialGradient8995-8"
+ cx="1199"
+ cy="944.79773"
+ fx="1199"
+ fy="944.79773"
+ r="1"
+ gradientTransform="matrix(1,0,0,100,348,-93534.974)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8989"
+ id="radialGradient9031"
+ cx="1371.6094"
+ cy="842.61261"
+ fx="1371.6094"
+ fy="842.61261"
+ r="174"
+ gradientTransform="matrix(1,0,0,0.00574713,2,842.51954)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8989"
+ id="radialGradient9035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.00574713,0,1038.5195)"
+ cx="1371.6094"
+ cy="842.61261"
+ fx="1371.6094"
+ fy="842.61261"
+ r="174" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.3330036"
+ inkscape:cx="907.03522"
+ inkscape:cy="-144.31449"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1531"
+ inkscape:window-height="878"
+ inkscape:window-x="61"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8422">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-836.36214)">
+ <path
+ style="opacity:1;fill:url(#linearGradient8981);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0 0 L 0 216 L 1920 216 L 1920 0 L 0 0 z M 1200 12 L 1546 12 L 1546 206 L 1200 206 L 1200 12 z "
+ transform="translate(0,836.36214)"
+ id="rect8965" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient8995);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8987"
+ width="2"
+ height="200"
+ x="1198"
+ y="844.79773" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient8995-8);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8987-9"
+ width="2"
+ height="200"
+ x="1546"
+ y="844.79816" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient9031);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect9023"
+ width="348"
+ height="2"
+ x="1199.6094"
+ y="846.36212" />
+ <rect
+ y="1042.3621"
+ x="1197.6094"
+ height="2"
+ width="348"
+ id="rect9033"
+ style="opacity:1;fill:url(#radialGradient9035);fill-opacity:1;stroke:none;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/skins/blackhole/themes/default/theme.xml b/skins/blackhole/themes/default/theme.xml
index 4eb66a9..6598af8 100644
--- a/skins/blackhole/themes/default/theme.xml
+++ b/skins/blackhole/themes/default/theme.xml
@@ -14,8 +14,10 @@
<color name="clrWhite">FFFFFFFF</color>
<color name="clrBlack">FF000000</color>
<color name="clrGray">FF999999</color>
+ <color name="clrGray2">FF777777</color>
<color name="clrRedTrans">55FF0000</color>
<color name="clrBlackTrans">99000000</color>
+ <color name="clrBlueMenu">FF00284A</color>
</colors>
<!--
these variables can be used everywhere in the templates
diff --git a/skins/blackhole/xmlfiles/plug-tvguideng-detail.xml b/skins/blackhole/xmlfiles/plug-tvguideng-detail.xml
index f7a0aab..dbe61ef 100644
--- a/skins/blackhole/xmlfiles/plug-tvguideng-detail.xml
+++ b/skins/blackhole/xmlfiles/plug-tvguideng-detail.xml
@@ -1,15 +1,454 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
-<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="55%" scaletvy="30%" scaletvwidth="40%" scaletvheight="40%">
+<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="55%" scaletvy="10%" scaletvwidth="40%" scaletvheight="40%">
<viewelement name="background">
- <area x="0" y="0" width="100%" height="30%" layer="1">
- <fill color="{clrRed}" />
+ <area x="0" y="0" width="100%" height="100%" layer="1">
+ <drawimage imagetype="skinpart" path="displaymenubacktv" x="0" y="0" width="100%" height="100%"/>
</area>
- <area x="0" y="0" width="100%" height="30%" layer="2">
- <drawtext align="center" valign="center" font="{regular}" fontsize="20%" color="{clrWhite}" text="{backtext} {zahl}" />
+ <area x="0" y="0" width="83%" height="8%" layer="2">
+ <drawimage imagetype="skinpart" path="displaymenuheader" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="74%" y="0" width="26%" height="46%" layer="3">
+ <drawimage imagetype="skinpart" path="displaymenucorner" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="4">
+ <drawimage imagetype="skinpart" path="watchback" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ </viewelement>
+
+ <scrollbar>
+ <area x="52%" y="10%" width="2%" height="80%" layer="2">
+ <drawimage imagetype="skinpart" path="scrollbarback" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="52%" y="10%" width="2%" height="80%" layer="3">
+ <drawimage imagetype="skinpart" path="scrollbar" x="0" y="{areaheight} * {offset} / 1000" width="100%" height="{areaheight} * {height} / 1000"/>
+ </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 condition="{red1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red1}" x="0" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green1}" x="0" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow1}" x="0" y="90%" width="25%" height="10%" layer="4">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue1}" x="0" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red4}" x="75%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green4}" x="60%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow4}" x="75%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue4}" x="75%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
</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">
+ <area x="81%" y="0" width="7%" height="5%" layer="5">
+ <drawtext x="0" valign="center" font="{digital}" fontsize="90%" color="{clrWhite}" text="{time}" />
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="5">
+ <drawimage imagetype="skinpart" path="watchhands/s_{sec}" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="6">
+ <drawimage imagetype="skinpart" path="watchhands/m_{min}" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="7">
+ <drawimage imagetype="skinpart" path="watchhands/h_{hmins}" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ </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="0" y="0" width="83%" height="8%" layer="3">
+ <drawimage name="logo" imagetype="channellogo" path="{channelid}" x="1%" width="5%" height="90%" align="left" valign="center" />
+ <drawtext x="{posx(logo)} + {width(logo)}+20" valign="center" font="{semibold}" fontsize="80%" color="{clrWhite}" text="{channelnumber} - {channelname}" />
+ </area>
+ <area x="1%" y="10%" width="50%" height="80%" layer="2">
+ <drawimage imagetype="skinpart" path="displaymendetailback" x="0" y="0" width="100%" height="100%" />
+ </area>
+ <area x="55%" y="52%" width="43%" height="38%" layer="2">
+ <drawimage imagetype="skinpart" path="displaymenucurrentback" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area condition="not{ismovie}++not{isseries}" x="55%" y="52%" width="43%" height="20%" layer="3">
+ <drawtext x="3%" y="15%" font="{regular}" fontsize="15%" color="{clrWhite}" text="{day} {date} {start} - {stop} ({duration} mins)" />
+ <drawtext x="3%" y="30%" width="96%" font="{semibold}" fontsize="30%" color="{clrWhite}" text="{title}" />
+ <drawtext x="3%" y="60%" width="96%" font="{regular}" fontsize="20%" color="{clrWhite}" text="{shorttext}" />
+ </area>
+ <area condition="{isseries}" x="55%" y="52%" width="43%" height="20%" layer="3">
+ <drawimage name="banner" imagetype="image" path="{bannerpath}" align="center" y="1%" width="70%" height="{areawidth} * 0.7 * {bannerheight} / {bannerwidth}"/>
+ <drawtext name="datetime" x="3%" y="{posy(banner)} + {height(banner)} + 5" font="{regular}" fontsize="15%" color="{clrWhite}" text="{day} {date} {start} - {stop} ({duration} mins)" />
+ <drawtext x="3%" y="{posy(datetime)} + {height(datetime)}" width="96%" font="{semibold}" fontsize="30%" color="{clrWhite}" text="{title} - {shorttext}" />
+ </area>
+ <area condition="{ismovie}" x="55%" y="52%" width="43%" height="20%" layer="3">
+ <drawimage name="poster" imagetype="image" path="{posterpath}" x="1%" valign="center" width="{areaheight} * {posterwidth} / {posterheight}" height="{areaheight}-20"/>
+ <drawtext x="{posx(poster)} + {width(poster)} + 10" y="15%" font="{regular}" fontsize="15%" color="{clrWhite}" text="{day} {date} {start} - {stop} ({duration} mins)" />
+ <drawtext x="{posx(poster)} + {width(poster)} + 10" y="30%" width="{areawidth} - {posx(poster)} - {width(poster)} - 20" font="{semibold}" fontsize="30%" color="{clrWhite}" text="{title}" />
+ <drawtext x="{posx(poster)} + {width(poster)} + 10" y="60%" width="{areawidth} - {posx(poster)} - {width(poster)} - 20" font="{regular}" fontsize="20%" color="{clrWhite}" text="{shorttext}" />
+ </area>
+ <area x="56%" y="72%" width="41%" height="17%" layer="2">
+ <drawimage imagetype="skinpart" path="tabback" x="0" y="0" width="100%" height="100%"/>
+ </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="11%" width="48%" height="78%" layer="3" scrollheight="{areaheight}/4">
+ <drawtext x="0" y="0" font="{semibold}" fontsize="6%" color="{clrWhite}" text="{day} {date} {start} - {stop} ({duration} mins)" />
+ <drawtext x="0" y="6%" width="100%" font="{semibold}" fontsize="9%" color="{clrWhite}" text="{title}" />
+ <drawtext x="0" y="14%" width="100%" font="{regular}" fontsize="7%" color="{clrWhite}" text="{shorttext}" />
+
+ <drawtextbox condition="not{isseries}++not{ismovie}" x="0" y="24%" width="96%" font="{regular}" fontsize="5%" color="{clrWhite}" text="{description}" />
+ <drawimage condition="{isseries}" name="seriesposter" imagetype="image" path="{seriesposter1path}" x="{areawidth}*0.7" y="20%" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {seriesposter1height} / {seriesposter1width}"/>
+ <drawimage condition="{ismovie}" name="movieposter" imagetype="image" path="{posterpath}" x="{areawidth}*0.7" y="20%" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {posterheight} / {posterwidth}" />
+ <drawtextbox condition="{isseries}" x="0" y="24%" width="96%" float="topright" floatwidth="{width(seriesposter)} + 10" floatheight="{height(seriesposter)} + 20" font="{regular}" fontsize="5%" color="{clrWhite}" text="{description}" />
+ <drawtextbox condition="{ismovie}" x="0" y="24%" width="96%" float="topright" floatwidth="{width(movieposter)} + 10" floatheight="{height(movieposter)} + 20" font="{regular}" fontsize="5%" color="{clrWhite}" text="{description}" />
+
+ </tab>
+ <!-- TAB RERUNS -->
+ <tab name="{tr(reruns)}" x="2%" y="11%" width="48%" height="78%" layer="3" scrollheight="{areaheight}/4">
+ <drawtext align="center" y="0" width="100%" name="title" font="{semibold}" fontsize="6%" color="{clrWhite}" text="{tr(rerunsof)} '{title}'" />
+ <loop name="reruns" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="vertical">
+ <drawimage name="logo" condition="{reruns[channellogoexists]}" imagetype="channellogo" path="{reruns[channelid]}" x="0" width="10%" height="10%" />
+ <drawtext name="channelname" condition="not{reruns[channellogoexists]}" x="0" y="2%" font="{regular}" fontsize="5%" color="{clrWhite}" text="{reruns[channelname]}" />
+ <drawtext condition="{reruns[channellogoexists]}" x="{width(logo)}+20" y="0" width="{areawidth} - {width(logo)} - 20" font="{regular}" fontsize="5%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}" />
+ <drawtext condition="{reruns[channellogoexists]}" x="{width(logo)}+20" y="4%" width="{areawidth} - {width(logo)} - 20" font="{semibold}" fontsize="5%" color="{clrWhite}" text="{reruns[title]} {reruns[shorttext]}" />
+ <drawtext condition="not{reruns[channellogoexists]}" x="{width(channelname)}+20" y="0" width="{areawidth} - {width(logo)} - 20" font="{regular}" fontsize="5%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}" />
+ <drawtext condition="not{reruns[channellogoexists]}" x="{width(channelname)}+20" y="4%" width="{areawidth} - {width(logo)} - 20" font="{semibold}" fontsize="5%" color="{clrWhite}" text="{reruns[title]} {reruns[shorttext]}" />
+ </loop>
+ </tab>
+ <!-- TAB ACTORS -->
+ <tab condition="{isseries}||{ismovie}" name="{tr(actors)}" x="2%" y="11%" width="48%" height="78%" layer="3" scrollheight="{areaheight}/4">
+ <drawtext align="center" name="title" y="0" font="{semibold}" fontsize="15%" color="{clrWhite}" text="{tr(actors)}" />
+ <loop name="actors" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="horizontal" columnwidth="{areawidth}*0.3" rowheight="{areawidth}*0.3*1.8" overflow="linewrap">
+ <drawimage name="thumb" imagetype="image" path="{actors[thumb]}" x="20" y="0" width="{columnwidth}-40" height="{columnwidth} * {actors[thumbheight]} / {actors[thumbwidth]} - 40 * {actors[thumbheight]} / {actors[thumbwidth]}"/>
+ <drawtext align="center" y="{height(thumb)} + 10" width="{columnwidth}" name="actorname" font="{regular}" fontsize="7%" color="{clrWhite}" text="{actors[name]}" />
+ <drawtext align="center" y="{height(thumb)} + 10 + {height(actorname)}" width="{columnwidth}" font="{regular}" fontsize="7%" color="{clrWhite}" text="{actors[role]}" />
+ </loop>
+ </tab>
+ <!-- TAB TVDBINFO -->
+ <tab condition="{isseries}" name="TvDBInfo" x="2%" y="11%" width="48%" height="78%" layer="3" scrollheight="{areaheight}/4">
+ <drawimage name="banner" imagetype="image" path="{seriesbanner1path}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner1height} / {seriesbanner1width}"/>
+ <drawimage name="episodeimage" imagetype="image" path="{episodeimagepath}" x="{areawidth}*0.7" y="{height(banner)} + 20" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {episodeimageheight} / {episodeimagewidth}"/>
+ <drawimage name="seasonposter" imagetype="image" path="{seasonposterpath}" x="{areawidth}*0.7" y="{height(banner)} + {height(episodeimage)} + 30" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {seasonposterheight} / {seasonposterwidth}"/>
+ <drawtextbox x="0" y="{height(banner)} + 20" width="96%" float="topright" floatwidth="{width(seasonposter)} + 10" floatheight="{height(episodeimage)} + {height(seasonposter)} + 30" font="{regular}" fontsize="6%" color="{clrWhite}" text="{tr(episode)}: {episodetitle} ({tr(season)} {episodeseason}, {tr(episode)} {episodenumber}) &#10;&#10;{episodeoverview}|&#10;&#10;{tr(gueststars)}: {episodegueststars}||&#10;&#10;{tr(seriesfirstaired)}: {seriesfirstaired}||&#10;{tr(episodefirstaired)}: {episodefirstaired}||&#10;{tr(network)}: {seriesnetwork}||&#10;{tr(genre)}: {seriesgenre}||&#10;{tr(status)}: {seriesstatus}||&#10;{tr(rating)}: {seriesrating}||&#10;{tr(episoderating)}: {episoderating}&#10;|{seriesoverview}&#10;" />
+ </tab>
+ <!-- TAB SERIESGALERY -->
+ <tab condition="{isseries}" name="{tr(seriesgalery)}" x="2%" y="11%" width="48%" height="78%" layer="3" scrollheight="{areaheight}/4">
+ <drawimage name="banner1" imagetype="image" path="{seriesbanner1path}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner1height} / {seriesbanner1width}"/>
+ <drawimage name="fanart1" imagetype="image" path="{seriesfanart1path}" align="center" y="{posy(banner1)} + {height(banner1)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart1height} / {seriesfanart1width}"/>
+ <drawimage name="banner2" imagetype="image" path="{seriesbanner2path}" align="center" y="{posy(fanart1)} + {height(fanart1)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner2height} / {seriesbanner2width}"/>
+ <drawimage name="fanart2" imagetype="image" path="{seriesfanart2path}" align="center" y="{posy(banner2)} + {height(banner2)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart2height} / {seriesfanart2width}"/>
+ <drawimage name="banner3" imagetype="image" path="{seriesbanner3path}" align="center" y="{posy(fanart2)} + {height(fanart2)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner3height} / {seriesbanner3width}"/>
+ <drawimage name="fanart3" imagetype="image" path="{seriesfanart3path}" align="center" y="{posy(banner3)} + {height(banner3)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart3height} / {seriesfanart3width}"/>
+ <drawimage name="poster1" imagetype="image" path="{seriesposter1path}" align="center" y="{posy(fanart3)} + {height(fanart3)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter1height} / {seriesposter1width}"/>
+ <drawimage name="poster2" imagetype="image" path="{seriesposter2path}" align="center" y="{posy(poster1)} + {height(poster1)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter2height} / {seriesposter2width}"/>
+ <drawimage name="poster3" imagetype="image" path="{seriesposter3path}" align="center" y="{posy(poster2)} + {height(poster2)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter3height} / {seriesposter3width}"/>
+ </tab>
+ <!-- TAB MOVIEDBINFO -->
+ <tab condition="{ismovie}" name="MovieDBInfo" x="2%" y="11%" width="48%" height="78%" layer="3" scrollheight="{areaheight}/4">
+ <drawimage name="poster" imagetype="image" path="{posterpath}" x="70%" y="10" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {posterheight} / {posterwidth}"/>
+ <drawtextbox x="0" y="10" width="96%" float="topright" floatwidth="{width(poster)} + 10" floatheight="{height(poster)} + 20" font="{regular}" fontsize="6%" color="{clrWhite}" text="{tr(originaltitle)}: {movieoriginalTitle}&#10;&#10;|{tr(genre)}: {moviegenres}&#10;&#10;||{movietagline}&#10;&#10;|{movieoverview}&#10;&#10;|{tr(budget)}: {moviebudget}&#10;||{tr(revenue)}: {movierevenue}&#10;&#10;||{tr(adult)}: {movieadult}&#10;||{tr(releasedate)}: {moviereleasedate}&#10;||{tr(runtime)}: {movieruntime} min&#10;||&#10;{tr(popularity)}: {moviepopularity}&#10;||&#10;{tr(voteaverage)}: {movievoteaverage}&#10;||&#10;{tr(homepage)}: {moviehomepage}|&#10;" />
+ </tab>
+ <!-- TAB MOVIEGALERY -->
+ <tab condition="{ismovie}" name="{tr(moviegalery)}" x="2%" y="11%" width="48%" height="78%" layer="3" scrollheight="{areaheight}/4">
+ <drawimage name="fanart" imagetype="image" path="{fanartpath}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {fanartheight} / {fanartwidth}"/>
+ <drawimage name="poster" imagetype="image" path="{posterpath}" align="center" y="{height(fanart)} + 30" width="{areawidth}*0.6" height="{areawidth} * 0.6 * {posterheight} / {posterwidth}"/>
+ <drawimage condition="{movieiscollection}" name="collectionfanart" imagetype="image" path="{collectionfanartpath}" align="center" y="{posy(poster)} + {height(poster)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {collectionfanartheight} / {collectionfanartwidth}"/>
+ <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>
+
+ <tablabels>
+ <area x="56%" y="72%" width="41%" height="9%" layer="3">
+ <drawtext align="center" y="0" width="100%" font="{semibold}" fontsize="100%" color="{clrWhite}" text="{currenttab}" />
+ </area>
+ <area x="56%" y="81%" width="18%" height="8%" layer="3">
+ <drawtext align="center" valign="center" width="100%" font="{regular}" fontsize="60%" color="{clrGray}" text="{prevtab}" />
+ </area>
+ <area x="79%" y="81%" width="17%" height="8%" layer="3">
+ <drawtext align="center" valign="center" width="100%" font="{regular}" fontsize="60%" color="{clrGray}" text="{nexttab}" />
+ </area>
+ </tablabels>
+
</displayplugin>
diff --git a/skins/blackhole/xmlfiles/plug-tvguideng-recmenu.xml b/skins/blackhole/xmlfiles/plug-tvguideng-recmenu.xml
new file mode 100644
index 0000000..4d1bfb9
--- /dev/null
+++ b/skins/blackhole/xmlfiles/plug-tvguideng-recmenu.xml
@@ -0,0 +1,454 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
+
+<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="0.625*{areawidth}" scaletvy="1%" scaletvwidth="18%" scaletvheight="18%">
+
+ <!-- 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 x="0" y="0" width="100%" height="100%" layer="4">
+ <fill color="{clrBlackTrans}" />
+ </area>
+ <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="{clrBlack}" />
+ </area>
+ <area condition="{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 + {areawidth}*0.03" height="{menuheight}*{areaheight}/100" color="{clrBlack}"/>
+ </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">
+ <drawimage imagetype="skinpart" path="scrollbarback" x="{areawidth}/2 + {menuwidth}*{areawidth}/100/2" y="{posy}*{areaheight}/100" width="2%" height="{totalheight}*{areaheight}/100"/>
+ </area>
+ <area x="0" y="0" width="100%" height="100%" layer="6">
+ <drawimage imagetype="skinpart" path="scrollbar" x="{areawidth}/2 + {menuwidth}*{areawidth}/100/2" y="{posy}*{areaheight}/100 + {totalheight}*{areaheight}/100 * {offset} / 1000" width="2%" height="{totalheight}*{areaheight}/100 * {height} / 1000"/>
+ </area>
+ </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">
+ <drawimage condition="not{current}" imagetype="skinpart" path="menubutton" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="menubuttonactive" x="0" y="0" width="100%" height="100%"/>
+ </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="{regular}" fontsize="60%" color="{clrWhite}" text="{line1}" />
+
+ <drawtext condition="eq({lines}, 2)" align="center" y="5%" font="{regular}" fontsize="40%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 2)" align="center" y="52%" font="{regular}" fontsize="40%" color="{clrWhite}" text="{line2}" />
+
+ <drawtext condition="eq({lines}, 3)" align="center" y="0%" font="{regular}" fontsize="28%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 3)" align="center" y="33%" font="{regular}" fontsize="28%" color="{clrWhite}" text="{line2}" />
+ <drawtext condition="eq({lines}, 3)" align="center" y="66%" font="{regular}" fontsize="28%" color="{clrWhite}" text="{line3}" />
+
+ <drawtext condition="eq({lines}, 4)" align="center" y="0%" font="{regular}" fontsize="22%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 4)" align="center" y="25%" font="{regular}" fontsize="22%" color="{clrWhite}" text="{line2}" />
+ <drawtext condition="eq({lines}, 4)" align="center" y="50%" font="{regular}" fontsize="22%" color="{clrWhite}" text="{line3}" />
+ <drawtext condition="eq({lines}, 4)" align="center" y="75%" font="{regular}" 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
+ -->
+ <area condition="{buttonyesno}" layer="5">
+ <drawimage condition="not{current}" imagetype="skinpart" path="menubutton" x="2%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="not{current}" imagetype="skinpart" path="menubutton" x="52%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++{yes}" imagetype="skinpart" path="menubuttonactive" x="2%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++{yes}" imagetype="skinpart" path="menubutton" x="52%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++not{yes}" imagetype="skinpart" path="menubutton" x="2%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++not{yes}" imagetype="skinpart" path="menubuttonactive" x="52%" y="5%" width="46%" height="90%"/>
+ </area>
+ <area condition="{buttonyesno}" layer="6">
+ <drawtext name="yestext" x="{areawidth}/4 - {width(yestext)}/2" valign="center" font="{light}" fontsize="70%" color="{clrWhite}" text="{textyes}" />
+ <drawtext name="notext" x="3*{areawidth}/4 - {width(notext)}/2" valign="center" font="{light}" fontsize="70%" color="{clrWhite}" text="{textno}" />
+ </area> <!-- 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
+ -->
+ <area condition="{textinput}" layer="6">
+ <drawtext x="1%" y="10%" font="{light}" fontsize="40%" color="{clrWhite}" text="{text}" />
+ <drawrectangle condition="not{editmode}" x="1%" y="55%" width="98%" height="40%" color="{clrWhite}"/>
+ <drawrectangle condition="{editmode}" x="1%" y="55%" width="98%" height="40%" color="{clrRed}"/>
+ </area>
+ <area condition="{textinput}" layer="7">
+ <drawtext align="right" y="55%" font="{light}" fontsize="40%" color="{clrBlack}" text="{value} " />
+ </area>
+ <!-- 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" />
+ <drawtext name="channelnumberlogo" condition="{channellogoexisis}" x="{areawidth}-{areaheight}-{width(channelnumberlogo)}-10" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{channelnumber}" />
+ <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
+ -->
+ <area condition="{weekdayselector}" layer="6">
+ <drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
+
+ <drawrectangle x="{areawidth} - {areaheight}*4" y="25%" width="{areaheight}*3.5" height="50%" color="{clrWhite}" />
+
+ <drawrectangle condition="not{day0set}" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray2}" />
+ <drawrectangle condition="{day0set}" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlueMenu}" />
+
+ <drawrectangle condition="not{day1set}" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray2}" />
+ <drawrectangle condition="{day1set}" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlueMenu}" />
+
+ <drawrectangle condition="not{day2set}" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray2}" />
+ <drawrectangle condition="{day2set}" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlueMenu}" />
+
+ <drawrectangle condition="not{day3set}" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray2}" />
+ <drawrectangle condition="{day3set}" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlueMenu}" />
+
+ <drawrectangle condition="not{day4set}" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray2}" />
+ <drawrectangle condition="{day4set}" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlueMenu}" />
+
+ <drawrectangle condition="not{day5set}" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray2}" />
+ <drawrectangle condition="{day5set}" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlueMenu}" />
+
+ <drawrectangle condition="not{day6set}" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray2}" />
+ <drawrectangle condition="{day6set}" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlueMenu}" />
+ </area>
+ <area condition="{weekdayselector}" layer="7">
+ <drawrectangle condition="{current}++eq({dayselected}, 0)" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlackTrans}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 1)" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlackTrans}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 2)" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlackTrans}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 3)" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlackTrans}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 4)" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlackTrans}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 5)" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlackTrans}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 6)" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlackTrans}" />
+
+ <drawtext name="day0" x="{areawidth} - {areaheight}*4.0 + {areaheight}/4 - {width(day0)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day0abbr}" />
+ <drawtext name="day1" x="{areawidth} - {areaheight}*3.5 + {areaheight}/4 - {width(day1)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day1abbr}" />
+ <drawtext name="day2" x="{areawidth} - {areaheight}*3.0 + {areaheight}/4 - {width(day2)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day2abbr}" />
+ <drawtext name="day3" x="{areawidth} - {areaheight}*2.5 + {areaheight}/4 - {width(day3)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day3abbr}" />
+ <drawtext name="day4" x="{areawidth} - {areaheight}*2.0 + {areaheight}/4 - {width(day4)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day4abbr}" />
+ <drawtext name="day5" x="{areawidth} - {areaheight}*1.5 + {areaheight}/4 - {width(day5)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day5abbr}" />
+ <drawtext name="day6" x="{areawidth} - {areaheight}*1.0 + {areaheight}/4 - {width(day6)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day6abbr}" />
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timerconflictheader}" layer="5">
+ <drawtext name="title" x="{areawidth}*0.7*0.5 - {width(title)}/2" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
+ <drawrectangle x="70%" y="0" width="30%" height="100%" color="{clrWhite}"/>
+ </area>
+ <area condition="{timerconflictheader}" layer="6">
+ <drawtext x="{areawidth}*0.7" y="0" font="{light}" fontsize="50%" color="{clrBlack}" text="{conflictstart}" />
+ <drawtext align="right" y="0" font="{light}" fontsize="50%" color="{clrBlack}" text="{conflictstop}" />
+ <drawtext name="olstart" x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100 - 70" y="50%" font="{light}" fontsize="50%" color="{clrRed}" text="{overlapstart}" />
+ <drawtext x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100 + {overlapwidthpercent}*{areawidth}*0.3/100 + 5" y="50%" font="{light}" fontsize="50%" color="{clrRed}" text="{overlapstop}" />
+ <drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="50%" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="50%" color="{clrRedTrans}"/>
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timerconflict}" layer="5">
+ <drawimage condition="not{current}" imagetype="skinpart" path="menubutton" x="0" y="0" width="70%" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="menubuttonactive" x="0" y="0" width="70%" height="100%"/>
+ </area>
+ <area condition="{timerconflict}" layer="6">
+ <drawimage condition="{current}++{infoactive}" imagetype="icon" path="ico_info_active" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{infoactive}" imagetype="icon" path="ico_info_inactive" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{deleteactive}" imagetype="icon" path="ico_delete_active" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{deleteactive}" imagetype="icon" path="ico_delete_inactive" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{editactive}" imagetype="icon" path="ico_edit_active" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{editactive}" imagetype="icon" path="ico_edit_inactive" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{searchactive}" imagetype="icon" path="ico_search_active" x="{areaheight}*1.7" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{searchactive}" imagetype="icon" path="ico_search_inactive" x="{areaheight}*1.7" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawtext x="{areaheight}*2.3" width="{areawidth}*0.7 - {areaheight}*2.4" y="0" font="{regular}" fontsize="40%" color="{clrWhite}" text="{timertitle}" />
+ <drawtext x="{areaheight}*2.3" y="40%" font="{light}" fontsize="30%" color="{clrWhite}" text="{weekday} {date} {starttime} - {stoptime}" />
+ <drawtext x="{areaheight}*2.3" y="70%" font="{light}" fontsize="30%" color="{clrWhite}" text="{channelname}, Transp. {transponder}" />
+ <drawrectangle x="70%" y="0" width="30%" height="100%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.7 + {timerstartpercent}*{areawidth}*0.3/100" y="30%" width="{timerwidthpercent}*{areawidth}*0.3/100" height="40%" color="{clrBlack}"/>
+ </area>
+ <area condition="{timerconflict}" layer="7">
+ <drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="0" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="100%" color="{clrRedTrans}"/>
+ </area>
+ <!-- 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"/>
+ <drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="{areaheight}*0.8" valign="center" width="{areaheight}" height="{areaheight}" />
+ <drawtext x="{areaheight}*2.2" y="2" font="{light}" fontsize="30%" color="{clrWhite}" text="{weekday} {date} {starttime} - {stoptime} {channelname}" />
+ <drawtext x="{areaheight}*2.2" y="30%" width="{areawidth} - 3*{areaheight}" font="{regular}" fontsize="45%" color="{clrWhite}" text="{title}" />
+ <drawtext x="{areaheight}*2.2" y="69%" width="{areawidth} - 3*{areaheight}" font="{light}" fontsize="30%" color="{clrWhite}" text="{shorttext}" />
+ <drawimage condition="{current}++not{hastimer}" imagetype="icon" path="ico_record_active" x="{areawidth} - {areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <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"/>
+ <drawimage condition="{current}++{editactive}" imagetype="icon" path="ico_edit_active" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{editactive}" imagetype="icon" path="ico_edit_inactive" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{deleteactive}" imagetype="icon" path="ico_delete_active" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{deleteactive}" imagetype="icon" path="ico_delete_inactive" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawtext x="{areaheight}*1.8" width="{areawidth} - {areaheight}*2" y="5%" font="{regular}" fontsize="45%" color="{clrWhite}" text="{searchstring}" />
+ <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
+ -->
+ <area condition="{timelineheader}" layer="5">
+ <drawtext align="center" y="1%" font="{regular}" fontsize="35%" color="{clrWhite}" text="Timer for {date}" />
+ <drawrectangle x="{areawidth}*0.05" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.0875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.1625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.2" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.2375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.275" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.3125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.35" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.3875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.425" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.4625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.5" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.5375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.575" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.6125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.65" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.6875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.725" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.7625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.8" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.8375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.9125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ </area>
+ <area condition="{timelineheader}" layer="6">
+ <drawtext name="text0" x="{areawidth}*0.05 + {areawidth}*0.0375/2 - {width(text0)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="0"/>
+ <drawtext name="text1" x="{areawidth}*0.0875 + {areawidth}*0.0375/2 - {width(text1)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="1"/>
+ <drawtext name="text2" x="{areawidth}*0.125 + {areawidth}*0.0375/2 - {width(text2)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="2"/>
+ <drawtext name="text3" x="{areawidth}*0.1625 + {areawidth}*0.0375/2 - {width(text3)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="3"/>
+ <drawtext name="text4" x="{areawidth}*0.2 + {areawidth}*0.0375/2 - {width(text4)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="4"/>
+ <drawtext name="text5" x="{areawidth}*0.2375 + {areawidth}*0.0375/2 - {width(text5)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="5"/>
+ <drawtext name="text6" x="{areawidth}*0.275 + {areawidth}*0.0375/2 - {width(text6)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="6"/>
+ <drawtext name="text7" x="{areawidth}*0.3125 + {areawidth}*0.0375/2 - {width(text7)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="7"/>
+ <drawtext name="text8" x="{areawidth}*0.35 + {areawidth}*0.0375/2 - {width(text8)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="8"/>
+ <drawtext name="text9" x="{areawidth}*0.3875 + {areawidth}*0.0375/2 - {width(text9)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="9"/>
+ <drawtext name="text10" x="{areawidth}*0.425 + {areawidth}*0.0375/2 - {width(text10)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="10"/>
+ <drawtext name="text11" x="{areawidth}*0.4625 + {areawidth}*0.0375/2 - {width(text11)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="11"/>
+ <drawtext name="text12" x="{areawidth}*0.5 + {areawidth}*0.0375/2 - {width(text12)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="12"/>
+ <drawtext name="text13" x="{areawidth}*0.5375 + {areawidth}*0.0375/2 - {width(text13)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="13"/>
+ <drawtext name="text14" x="{areawidth}*0.575 + {areawidth}*0.0375/2 - {width(text14)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="14"/>
+ <drawtext name="text15" x="{areawidth}*0.6125 + {areawidth}*0.0375/2 - {width(text15)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="15"/>
+ <drawtext name="text16" x="{areawidth}*0.65 + {areawidth}*0.0375/2 - {width(text16)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="16"/>
+ <drawtext name="text17" x="{areawidth}*0.6875 + {areawidth}*0.0375/2 - {width(text17)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="17"/>
+ <drawtext name="text18" x="{areawidth}*0.725 + {areawidth}*0.0375/2 - {width(text18)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="18"/>
+ <drawtext name="text19" x="{areawidth}*0.7625 + {areawidth}*0.0375/2 - {width(text19)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="19"/>
+ <drawtext name="text20" x="{areawidth}*0.8 + {areawidth}*0.0375/2 - {width(text20)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="20"/>
+ <drawtext name="text21" x="{areawidth}*0.8375 + {areawidth}*0.0375/2 - {width(text21)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="21"/>
+ <drawtext name="text22" x="{areawidth}*0.875 + {areawidth}*0.0375/2 - {width(text22)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="22"/>
+ <drawtext name="text23" x="{areawidth}*0.9125 + {areawidth}*0.0375/2 - {width(text23)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="23"/>
+ </area>
+ <area condition="{timelineheader}++{timerset}" layer="6">
+ <drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="1%" y="30%" width="{areaheight}*0.5" height="{areaheight}*0.5" />
+ <drawtext condition="not{channellogoexisis}" x="1%" width="{areaheight}*0.7" y="40%" font="{light}" fontsize="20%" color="{clrWhite}" text="{channelname}"/>
+ <drawtext x="{areaheight}*0.8" y="36%" font="{light}" fontsize="25%" color="{clrWhite}" text="{eventstart} - {eventstop} (Rec. {timerstart} - {timerstop}), Transp. {channeltransponder}"/>
+ <drawtext x="{areaheight}*0.8" y="57%" width="{areawidth}-{areaheight}" font="{light}" fontsize="25%" color="{clrWhite}" text="{eventtitle} - {eventshorttext}"/>
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timelinetimer}" layer="5">
+ <drawrectangle condition="{current}" x="5%" y="0" width="90%" height="100%" color="{clrBlueMenu}"/>
+ <drawrectangle condition="not{current}" x="5%" y="0" width="90%" height="100%" color="{clrGray}"/>
+ <drawrectangle x="5%" y="{areaheight}-1" width="90%" height="1" color="{clrBlack}"/>
+ </area>
+ <area condition="{timelinetimer}" layer="6">
+ <drawrectangle x="{areawidth}*0.05 + {timerstart}*{areawidth}*0.9/1000" y="25%" width="{timerwidth}*{areawidth}*0.9/1000" height="50%" color="{clrBlack}"/>
+ </area>
+ <!-- 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"/>
+ <drawtext x="{areaheight}" valign="center" font="{light}" width="{areawidth} - {areaheight}" fontsize="80%" color="{clrWhite}" text="{favdesc}" />
+ </area>
+ </grid>
+</displayplugin>
diff --git a/skins/blackhole/xmlfiles/plug-tvguideng-root.xml b/skins/blackhole/xmlfiles/plug-tvguideng-root.xml
index 342af31..bb7fc94 100644
--- a/skins/blackhole/xmlfiles/plug-tvguideng-root.xml
+++ b/skins/blackhole/xmlfiles/plug-tvguideng-root.xml
@@ -1,45 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
-<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="70%" scaletvy="0" scaletvwidth="30%" scaletvheight="15%">
+<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="0.625*{areawidth}" scaletvy="1%" scaletvwidth="18%" scaletvheight="18%">
- <viewelement name="background">
- <area x="0" y="20%" width="100%" height="65%" layer="1">
- <fill color="{clrGray}" />
+ <viewelement name="background_hor">
+ <area x="0" y="0" width="100%" height="20%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguideheader" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="5%" y="20%" width="8%" height="5%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_timelinegrid_dark_hor" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="74%" y="0" width="26%" height="46%" layer="2">
+ <drawimage imagetype="skinpart" path="displaymenucorner" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="3">
+ <drawimage imagetype="skinpart" path="watchback" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ </viewelement>
+
+ <viewelement name="background_ver">
+ <area x="0" y="0" width="100%" height="20%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguideheader" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="0" y="20%" width="8%" height="15%" layer="2">
+ <drawimage imagetype="skinpart" path="tvguide_timelinegrid_dark_ver" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="74%" y="0" width="26%" height="46%" layer="2">
+ <drawimage imagetype="skinpart" path="displaymenucorner" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="3">
+ <drawimage imagetype="skinpart" path="watchback" x="0" y="0" width="100%" height="100%"/>
</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">
- <area x="0" y="0" width="70%" height="15%" layer="1">
- <fill color="{clrRed}" />
+ <areascroll condition="not{isdummy}++not{hasposter}" orientation="vertical" mode="forthandback" delay="1000" scrollspeed="medium" x="1%" y="1%" width="58%" height="18%" layer="2">
+ <drawtext x="0" y="0" font="{semibold}" width="100%" fontsize="20%" color="{clrWhite}" text="{day} {daynumeric}.{month} {start} - {stop}" />
+ <drawtext x="0" y="20%" font="{semibold}" width="100%" fontsize="25%" color="{clrWhite}" text="{title}" />
+ <drawtextbox name="shorttext" x="0" y="45%" width="100%" font="{regular}" fontsize="15%" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox x="0" y="{posy(shorttext)} + {height(shorttext)}" width="100%" font="{regular}" fontsize="15%" color="{clrWhite}" text="{description}" />
+ </areascroll>
+ <area condition="not{isdummy}++{hasposter}" x="1%" y="1%" width="{areaheight}*0.18*{posterwidth}/{posterheight}" height="18%" layer="2">
+ <drawimage imagetype="image" path="{posterpath}" x="0" y="0" width="100%" height="100%"/>
</area>
- <area x="0" y="0" width="70%" height="20%" layer="2">
- <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{headertext}" />
+ <areascroll condition="not{isdummy}++{hasposter}" orientation="vertical" mode="forthandback" delay="1000" scrollspeed="medium" x="12%" y="1%" width="46%" height="18%" layer="2">
+ <drawtext x="0" y="0" font="{semibold}" width="100%" fontsize="20%" color="{clrWhite}" text="{day} {daynumeric}.{month} {start} - {stop}" />
+ <drawtext x="0" y="20%" font="{semibold}" width="100%" fontsize="25%" color="{clrWhite}" text="{title}" />
+ <drawtextbox name="shorttext" x="0" y="45%" width="100%" font="{regular}" fontsize="15%" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox x="0" y="{posy(shorttext)} + {height(shorttext)}" width="100%" font="{regular}" fontsize="15%" color="{clrWhite}" text="{description}" />
+ </areascroll>
+ <area condition="{isdummy}" x="1%" y="1%" width="58%" height="18%" layer="2">
+ <drawtext x="0" y="20%" font="{semibold}" width="100%" fontsize="35%" color="{clrWhite}" text="{title}" />
</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">
- <area x="0" y="85%" width="100%" height="15%" layer="1">
- <fill color="{clrBlue}" />
+ <area condition="{red1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red1}" x="0" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green1}" x="0" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow1}" x="0" y="90%" width="25%" height="10%" layer="4">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue1}" x="0" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
</area>
- <area x="0" y="85%" width="100%" height="15%" layer="2">
- <drawtext align="center" valign="center" font="{regular}" fontsize="60%" color="{clrWhite}" text="{footertext}" />
+ <area condition="{blue2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue2}" x="25%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue3}" x="50%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{red4}" x="75%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{green4}" x="60%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{yellow4}" x="75%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="60%"/>
+ </area>
+ <area condition="{blue4}" x="75%" y="90%" width="25%" height="10%" layer="3">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{blue}" />
</area>
</viewelement>
- <viewelement name="datetimeline">
- <area x="0" y="15%" width="15%" height="5%" layer="1">
- <fill color="{clrBlack}" />
+ <!-- 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">
+ <area x="81%" y="0" width="7%" height="5%" layer="3">
+ <drawtext x="0" valign="center" font="{digital}" fontsize="90%" color="{clrWhite}" text="{time}" />
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="4">
+ <drawimage imagetype="skinpart" path="watchhands/s_{sec}" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="4">
+ <drawimage imagetype="skinpart" path="watchhands/m_{min}" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="{areawidth}*0.865" y="{areawidth}*0.005" width="13%" height="{areawidth}*0.13" layer="5">
+ <drawimage imagetype="skinpart" path="watchhands/h_{hmins}" x="0" y="0" width="100%" height="100%"/>
+ </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="13%" height="5%" layer="2">
+ <drawtext align="center" valign="center" font="{light}" fontsize="70%" color="{clrWhite}" text="{weekday} {date}" />
+ </area>
+ </viewelement>
+
+ <viewelement name="datetimeline_ver">
+ <area x="0" y="20%" width="8%" height="15%" layer="2">
+ <drawtext align="center" y="10%" font="{light}" fontsize="40%" color="{clrWhite}" text="{weekday}" />
+ <drawtext align="center" y="50%" font="{light}" fontsize="40%" color="{clrWhite}" text="{date}" />
+ </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="13%" y="20%" width="87%" height="70%" layer="3">
+ <drawrectangle x="{percenttotal}*{areawidth}/1000" y="0" width="1" height="100%" color="{clrRed}" />
</area>
- <area x="0" y="15%" width="15%" height="5%" layer="2">
- <drawtext align="center" valign="center" font="{regular}" fontsize="80%" color="{clrWhite}" text="{date}" />
+ </viewelement>
+
+ <viewelement name="timeindicator_ver">
+ <area x="0" y="35%" width="100%" height="55%" layer="3">
+ <drawrectangle x="0" y="{percenttotal}*{areaheight}/1000" width="100%" height="1" color="{clrRed}" />
</area>
</viewelement>
- <grid debug="true" name="timeline" x="15%" y="15%" width="85%" height="5%">
+ <!-- Tokens available in timeline
+ {timestring} time of grid in hh:mm
+ -->
+ <grid name="timeline_hor" x="13%" y="20%" width="87%" height="5%">
<area layer="1">
- <fill condition="{fullhour}" color="{clrWhite}" />
- <fill condition="not{fullhour}" color="{clrBlack}" />
+ <drawimage condition="{fullhour}" imagetype="skinpart" path="tvguide_timelinegrid_bright_hor" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{fullhour}" imagetype="skinpart" path="tvguide_timelinegrid_dark_hor" x="0" y="0" width="100%" height="100%"/>
</area>
<area layer="2">
<drawtext condition="{fullhour}" x="5%" valign="center" font="{light}" fontsize="80%" color="{clrBlack}" text="{timestring}" />
@@ -47,26 +272,122 @@
</area>
</grid>
- <grid debug="true" name="channels" x="0" y="20%" width="15%" height="65%">
+ <grid name="timeline_ver" x="0" y="35%" width="8%" height="55%">
<area layer="1">
- <fill color="{clrYellow}" />
+ <drawimage condition="{fullhour}" imagetype="skinpart" path="tvguide_timelinegrid_bright_ver" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{fullhour}" imagetype="skinpart" path="tvguide_timelinegrid_dark_ver" x="0" y="0" width="100%" height="100%"/>
</area>
<area layer="2">
- <drawtext x="1%" valign="center" width="98%" font="{light}" fontsize="40%" color="{clrWhite}" text="{number} {name}" />
+ <drawtext condition="{fullhour}" align="center" y="5%" font="{light}" fontsize="60%" color="{clrBlack}" text="{timestring}" />
+ <drawtext condition="not{fullhour}" align="center" y="5%" font="{light}" fontsize="60%" color="{clrWhite}" text="{timestring}" />
</area>
</grid>
- <grid name="schedules" x="15%" y="20%" width="85%" height="65%">
+ <!-- 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="8%" height="65%">
<area layer="1">
- <fill condition="{color}++not{current}" color="{clrBlue}" />
- <fill condition="not{color}++not{current}" color="{clrGreen}" />
- <fill condition="{current}" color="{clrRed}" />
+ <drawimage imagetype="skinpart" path="tvguide_grid_active_hor" x="0" y="0" width="100%" height="100%"/>
</area>
<area layer="2">
- <drawtext condition="not{dummy}" x="1%" y="5%" width="98%" font="{light}" fontsize="30%" color="{clrWhite}" text="{start} - {stop}" />
- <drawtext condition="not{dummy}" x="1%" y="50%" width="98%" font="{light}" fontsize="30%" color="{clrWhite}" text="{title}" />
- <drawtext condition="{dummy}" x="1%" valign="center" width="98%" font="{light}" fontsize="40%" color="{clrWhite}" text="{title}" />
+ <drawtext x="1%" valign="center" font="{light}" fontsize="45%" color="{clrWhite}" text="{number}" />
+ <drawimage condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" x="19%" valign="center" width="80%" height="80%" />
+ <drawtext condition="not{channellogoexists}" x="19%" valign="center" width="94%" font="{light}" fontsize="45%" color="{clrWhite}" text="{name}" />
</area>
</grid>
+ <grid name="channels_ver" x="8%" y="25%" width="92%" height="10%">
+ <area layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_grid_active_ver" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawimage condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" align="center" valign="center" width="80%" height="80%" />
+ <drawtext condition="not{channellogoexists}" align="center" valign="center" width="98%" font="{light}" fontsize="30%" color="{clrWhite}" text="{name}" />
+ </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="65%">
+ <area layer="1">
+ <drawimage condition="{color}" imagetype="skinpart" path="tvguide_grid_bright_ver" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{color}" imagetype="skinpart" path="tvguide_grid_dark_ver" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtextvertical align="center" valign="center" font="{regular}" fontsize="50%" color="{clrWhite}" text="{group}" />
+ </area>
+ </grid>
+
+ <grid name="channelgroups_ver" x="8%" y="20%" width="92%" height="5%">
+ <area layer="1">
+ <drawimage condition="{color}" imagetype="skinpart" path="tvguide_grid_bright_hor" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{color}" imagetype="skinpart" path="tvguide_grid_dark_hor" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtext align="center" valign="center" font="{regular}" fontsize="80%" color="{clrWhite}" text="{group}" />
+ </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="13%" y="25%" width="87%" height="65%">
+ <area layer="1">
+ <drawimage condition="{color}++not{current}" imagetype="skinpart" path="tvguide_grid_bright_hor" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{color}++not{current}" imagetype="skinpart" path="tvguide_grid_dark_hor" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_hor" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtext condition="not{dummy}" x="1%" y="2%" width="98%" font="{light}" fontsize="45%" color="{clrWhite}" text="{start} - {stop}" />
+ <drawtext condition="not{dummy}" x="1%" y="50%" width="98%" font="{regular}" fontsize="50%" color="{clrWhite}" text="{title}" />
+ <drawtext condition="{dummy}" x="1%" valign="center" width="98%" font="{regular}" fontsize="50%" color="{clrWhite}" text="{title}" />
+ <drawimage condition="{timer}" imagetype="icon" path="ico_rec_on" x="{areawidth} - {areaheight}*0.42" y="58%" width="{areaheight}*0.4" height="{areaheight}*0.4"/>
+ <drawimage condition="{switchtimer}++not{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.42" y="58%" width="{areaheight}*0.4" height="{areaheight}*0.4"/>
+ <drawimage condition="{switchtimer}++{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.84" y="58%" width="{areaheight}*0.4" height="{areaheight}*0.4"/>
+ </area>
+ </grid>
+
+ <grid name="schedules_ver" x="8%" y="35%" width="92%" height="55%">
+ <area layer="1">
+ <drawimage condition="{color}++not{current}" imagetype="skinpart" path="tvguide_grid_bright_ver" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{color}++not{current}" imagetype="skinpart" path="tvguide_grid_dark_ver" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_ver" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtext condition="not{dummy}" x="2%" y="0" width="96%" font="{light}" fontsize="{areawidth}*0.16" color="{clrWhite}" text="{start} - {stop}" />
+ <drawtextbox name="title" condition="not{dummy}" x="2%" y="{areawidth}*0.16" width="96%" font="{regular}" fontsize="{areawidth}*0.15" color="{clrWhite}" text="{title}" />
+ <drawtextbox condition="not{dummy}" x="2%" y="{posy(title)} + {height(title)} - {areawidth}*0.1" width="96%" height="{areaheight}*1.1 - {posy(title)} - {height(title)}" font="{light}" fontsize="{areawidth}*0.12" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox condition="{dummy}" x="2%" y="5%" width="96%" font="{regular}" fontsize="{areawidth}*0.2" color="{clrWhite}" text="{title}" />
+ <drawimage condition="{timer}" imagetype="icon" path="ico_rec_on" x="82%" y="{areaheight}-{areawidth}*0.18" width="15%" height="{areawidth}*0.15"/>
+ <drawimage condition="{switchtimer}++not{timer}" imagetype="icon" path="ico_switchtimer" x="82%" y="{areaheight}-{areawidth}*0.18" width="15%" height="{areawidth}*0.15"/>
+ <drawimage condition="{switchtimer}++{timer}" imagetype="icon" path="ico_switchtimer" x="65%" y="{areaheight}-{areawidth}*0.18" width="15%" height="{areawidth}*0.15"/>
+ </area>
+ </grid>
+
+ <!-- Tokens available in channeljump
+ {channel} current user input for channel jump
+ -->
+ <viewelement name="channeljump">
+ <area x="40%" y="40%" width="20%" height="20%" layer="3">
+ <fill color="{clrBlack}" />
+ </area>
+ <area x="40%" y="40%" width="20%" height="20%" layer="4">
+ <drawtext align="center" y="10%" font="{bold}" fontsize="30%" color="{clrWhite}" text="Channel" />
+ <drawtext align="center" y="45%" font="{light}" fontsize="50%" color="{clrWhite}" text="{channel}" />
+ </area>
+ </viewelement>
+
</displayplugin>
diff --git a/skins/metrixhd/themes/default/icons/ico_switchtimer.svg b/skins/metrixhd/themes/default/icons/ico_switchtimer.svg
new file mode 100644
index 0000000..5e2da04
--- /dev/null
+++ b/skins/metrixhd/themes/default/icons/ico_switchtimer.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="45"
+ height="23"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91pre2 r13516"
+ viewBox="0 0 45 23"
+ sodipodi:docname="ico_switchtimer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6"
+ inkscape:cx="13.069196"
+ inkscape:cy="16.082332"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1846"
+ inkscape:window-height="1058"
+ inkscape:window-x="66"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1029.3622)">
+ <rect
+ style="fill:#ff7f2a;fill-opacity:1;stroke:#ececec;stroke-width:0;stroke-miterlimit:5.69999981;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4148"
+ width="45"
+ height="23"
+ x="4.9999999e-006"
+ y="1029.3622"
+ ry="8.9285717" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="1.4285712"
+ y="1045.0408"
+ id="text4150"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4152"
+ x="1.4285712"
+ y="1045.0408">Switch</tspan></text>
+ </g>
+</svg>
diff --git a/skins/metrixhd/themes/default/theme.xml b/skins/metrixhd/themes/default/theme.xml
index 9c65d2a..7822178 100644
--- a/skins/metrixhd/themes/default/theme.xml
+++ b/skins/metrixhd/themes/default/theme.xml
@@ -10,6 +10,7 @@
<color name="clrGreen">FF5FE200</color>
<color name="clrYellow">FFE2DA00</color>
<color name="clrBlue">FF007FE2</color>
+ <color name="clrBlack">FF000000</color>
<color name="clrTransBlack">C0000000</color>
<color name="clrSemiTransBlack">D0000000</color>
<color name="clrBlueLight">FF1E8BD7</color>
@@ -17,6 +18,7 @@
<color name="clrTransWhite">C0FFFFFF</color>
<color name="clrWhite">FFFFFFFF</color>
<color name="clrDarkGray">FF14141E</color>
+ <color name="clrRedTrans">55FF0000</color>
<color name="clrTransparent">00000000</color>
</colors>
<!--
diff --git a/skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml b/skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml
new file mode 100644
index 0000000..ef8403d
--- /dev/null
+++ b/skins/metrixhd/xmlfiles/plug-tvguideng-detail.xml
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
+
+<displayplugin x="0" y="0" width="100%" height="100%">
+
+ <viewelement name="background">
+ <area x="0" y="0" width="100%" height="100%" layer="1">
+ <fill color="{clrTransBlack}" />
+ </area>
+ <area x="0" y="0" width="100%" height="20%" layer="2">
+ <fill color="{clrTransBlueLight}" />
+ </area>
+ <area x="0" y="85%" width="100%" height="2" layer="3">
+ <fill color="{clrTransBlueLight}" />
+ </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}" />
+ <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 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}" />
+ <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>
+ </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" />
+ <drawimage condition="{isseries}++{banneravailable}++not{epgpicavailable}" imagetype="image" path="{bannerpath}" x="{areawidth} - {areawidth}/3 - 10" valign="center" width="{areawidth}/3" height="{areawidth}/3 * {bannerheight} / {bannerwidth}"/>
+ <drawimage condition="{ismovie}++{posteravailable}++not{epgpicavailable}" imagetype="image" path="{posterpath}" x="{areawidth} - {areaheight}*8/10" valign="center" width="{areaheight}*8 / 10 * {posterheight} / {posterwidth}" height="{areaheight}*8 / 10"/>
+ <drawimage condition="{epgpicavailable}" imagetype="image" path="{epgpicpath}" x="{areawidth} - {areaheight}*8/10 * 174 / 130" valign="center" width="{areaheight}*8/10 * 174 / 130" height="{areaheight}*8 / 10"/>
+
+ <drawtext name="title" x="{width(logo)} + 20" valign="center" font="{semibold}" fontsize="35%" color="{clrWhite}" text="{title}" />
+ <drawtext name="datetime" x="{width(logo)} + 20" y="{posy(title)} - {height(datetime)}" font="{light}" fontsize="25%" color="{clrWhite}" text="{day} {date} {start} - {stop} ({duration} mins)" />
+ <drawtext name="shorttext" x="{width(logo)} + 20" y="{posy(title)} + {height(title)}" font="{light}" fontsize="25%" color="{clrWhite}" text="{shorttext}" />
+ </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}" />
+ <drawimage condition="{isseries}" name="seriesposter" imagetype="image" path="{seriesposter1path}" x="{areawidth}*0.75" y="0" width="{areawidth}*0.25" height="{areawidth} * 0.25 * {seriesposter1height} / {seriesposter1width}"/>
+ <drawimage condition="{ismovie}" name="movieposter" imagetype="image" path="{posterpath}" x="{areawidth}*0.75" y="0" width="{areawidth}*0.25" height="{areawidth} * 0.25 * {posterheight} / {posterwidth}" />
+ <drawtextbox condition="{isseries}" x="0" y="0" width="96%" float="topright" floatwidth="{width(seriesposter)} + 10" floatheight="{height(seriesposter)} + 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{description}" />
+ <drawtextbox condition="{ismovie}" x="0" y="0" width="96%" float="topright" floatwidth="{width(movieposter)} + 10" floatheight="{height(movieposter)} + 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{description}" />
+ </tab>
+ <!-- TAB RERUNS -->
+ <tab condition="{hasreruns}" name="{tr(reruns)}" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
+ <drawtext align="center" y="0" name="title" font="{light}" fontsize="10%" color="{clrWhite}" text="{tr(rerunsof)} '{title}'" />
+ <loop name="reruns" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="vertical">
+ <drawimage name="logo" condition="{reruns[channellogoexists]}" imagetype="channellogo" path="{reruns[channelid]}" x="0" width="10%" height="10%" />
+ <drawtext name="channelname" condition="not{reruns[channellogoexists]}" x="-5" font="{light}" fontsize="10%" color="{clrWhite}" text="{reruns[channelname]}" />
+ <drawtext condition="{reruns[channellogoexists]}" x="{width(logo)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />
+ <drawtext condition="not{reruns[channellogoexists]}" x="{width(channelname)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />
+ </loop>
+ </tab>
+ <!-- TAB ACTORS -->
+ <tab condition="{isseries}||{ismovie}" name="{tr(actors)}" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
+ <drawtext align="center" name="title" y="0" font="{semibold}" fontsize="15%" color="{clrWhite}" text="{tr(actors)}" />
+ <loop name="actors" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="horizontal" columnwidth="{areawidth}/5" rowheight="{areawidth}/5*1.8" overflow="linewrap">
+ <drawimage name="thumb" imagetype="image" path="{actors[thumb]}" x="20" y="0" width="{columnwidth}-40" height="{columnwidth} * {actors[thumbheight]} / {actors[thumbwidth]} - 40 * {actors[thumbheight]} / {actors[thumbwidth]}"/>
+ <drawtext align="center" y="{height(thumb)} + 10" width="{columnwidth}" name="actorname" font="{light}" fontsize="7%" color="{clrWhite}" text="{actors[name]}" />
+ <drawtext align="center" y="{height(thumb)} + 10 + {height(actorname)}" width="{columnwidth}" font="{light}" fontsize="7%" color="{clrWhite}" text="{actors[role]}" />
+ </loop>
+ </tab>
+ <!-- TAB TVDBINFO -->
+ <tab condition="{isseries}" name="TvDBInfo" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="banner" imagetype="image" path="{seriesbanner1path}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner1height} / {seriesbanner1width}"/>
+ <drawimage name="episodeimage" imagetype="image" path="{episodeimagepath}" x="{areawidth}*0.7" y="{height(banner)} + 20" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {episodeimageheight} / {episodeimagewidth}"/>
+ <drawimage name="seasonposter" imagetype="image" path="{seasonposterpath}" x="{areawidth}*0.7" y="{height(banner)} + {height(episodeimage)} + 30" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {seasonposterheight} / {seasonposterwidth}"/>
+ <drawtextbox x="0" y="{height(banner)} + 20" width="96%" float="topright" floatwidth="{width(seasonposter)} + 10" floatheight="{height(episodeimage)} + {height(seasonposter)} + 30" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(episode)}: {episodetitle} ({tr(season)} {episodeseason}, {tr(episode)} {episodenumber}) &#10;&#10;{episodeoverview}|&#10;&#10;{tr(gueststars)}: {episodegueststars}||&#10;&#10;{tr(seriesfirstaired)}: {seriesfirstaired}||&#10;{tr(episodefirstaired)}: {episodefirstaired}||&#10;{tr(network)}: {seriesnetwork}||&#10;{tr(genre)}: {seriesgenre}||&#10;{tr(status)}: {seriesstatus}||&#10;{tr(rating)}: {seriesrating}||&#10;{tr(episoderating)}: {episoderating}&#10;|{seriesoverview}&#10;" />
+ </tab>
+ <!-- TAB SERIESGALERY -->
+ <tab condition="{isseries}" name="{tr(seriesgalery)}" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="banner1" imagetype="image" path="{seriesbanner1path}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner1height} / {seriesbanner1width}"/>
+ <drawimage name="fanart1" imagetype="image" path="{seriesfanart1path}" align="center" y="{posy(banner1)} + {height(banner1)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart1height} / {seriesfanart1width}"/>
+ <drawimage name="banner2" imagetype="image" path="{seriesbanner2path}" align="center" y="{posy(fanart1)} + {height(fanart1)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner2height} / {seriesbanner2width}"/>
+ <drawimage name="fanart2" imagetype="image" path="{seriesfanart2path}" align="center" y="{posy(banner2)} + {height(banner2)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart2height} / {seriesfanart2width}"/>
+ <drawimage name="banner3" imagetype="image" path="{seriesbanner3path}" align="center" y="{posy(fanart2)} + {height(fanart2)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner3height} / {seriesbanner3width}"/>
+ <drawimage name="fanart3" imagetype="image" path="{seriesfanart3path}" align="center" y="{posy(banner3)} + {height(banner3)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart3height} / {seriesfanart3width}"/>
+ <drawimage name="poster1" imagetype="image" path="{seriesposter1path}" align="center" y="{posy(fanart3)} + {height(fanart3)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter1height} / {seriesposter1width}"/>
+ <drawimage name="poster2" imagetype="image" path="{seriesposter2path}" align="center" y="{posy(poster1)} + {height(poster1)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter2height} / {seriesposter2width}"/>
+ <drawimage name="poster3" imagetype="image" path="{seriesposter3path}" align="center" y="{posy(poster2)} + {height(poster2)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter3height} / {seriesposter3width}"/>
+ </tab>
+ <!-- TAB MOVIEDBINFO -->
+ <tab condition="{ismovie}" name="MovieDBInfo" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="poster" imagetype="image" path="{posterpath}" x="70%" y="10" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {posterheight} / {posterwidth}"/>
+ <drawtextbox x="0" y="10" width="96%" float="topright" floatwidth="{width(poster)} + 10" floatheight="{height(poster)} + 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{tr(originaltitle)}: {movieoriginalTitle}&#10;&#10;|{tr(genre)}: {moviegenres}&#10;&#10;||{movietagline}&#10;&#10;|{movieoverview}&#10;&#10;|{tr(budget)}: {moviebudget}&#10;||{tr(revenue)}: {movierevenue}&#10;&#10;||{tr(adult)}: {movieadult}&#10;||{tr(releasedate)}: {moviereleasedate}&#10;||{tr(runtime)}: {movieruntime} min&#10;||&#10;{tr(popularity)}: {moviepopularity}&#10;||&#10;{tr(voteaverage)}: {movievoteaverage}&#10;||&#10;{tr(homepage)}: {moviehomepage}|&#10;" />
+ </tab>
+ <!-- TAB MOVIEGALERY -->
+ <tab condition="{ismovie}" name="{tr(moviegalery)}" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="fanart" imagetype="image" path="{fanartpath}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {fanartheight} / {fanartwidth}"/>
+ <drawimage name="poster" imagetype="image" path="{posterpath}" align="center" y="{height(fanart)} + 30" width="{areawidth}*0.6" height="{areawidth} * 0.6 * {posterheight} / {posterwidth}"/>
+ <drawimage condition="{movieiscollection}" name="collectionfanart" imagetype="image" path="{collectionfanartpath}" align="center" y="{posy(poster)} + {height(poster)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {collectionfanartheight} / {collectionfanartwidth}"/>
+ <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:
+ {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">
+ <drawrectangle condition="{tabs[current]}" x="0" y="0" width="{width(label)}" height="100%" color="{clrTransBlueLight}" />
+ <drawrectangle condition="not{tabs[current]}" x="0" y="0" width="{width(label)}" height="100%" color="{clrTransBlueLight}" />
+ <drawrectangle condition="not{tabs[current]}" x="2" y="2" width="{width(label)} - 4" height="{areaheight}-4" color="{clrTransparent}" />
+ <drawtext name="label" x="0" valign="center" font="{light}" fontsize="95%" color="{clrWhite}" text=" {tabs[title]} " />
+ </loop>
+ </area>
+ </tablabels>
+
+</displayplugin>
diff --git a/skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml b/skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml
new file mode 100644
index 0000000..03ae66f
--- /dev/null
+++ b/skins/metrixhd/xmlfiles/plug-tvguideng-recmenu.xml
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!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}" />
+ </area>
+ <area condition="{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 + {areawidth}*0.03" height="{menuheight}*{areaheight}/100" color="{clrTransBlack}"/>
+ </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}" />
+ <drawrectangle x="{areawidth}/2 + {menuwidth}*{areawidth}/100/2 + 2" y="{posy}*{areaheight}/100 + 2" width="{areawidth}*0.02 - 4" height="{totalheight}*{areaheight}/100 - 4" color="{clrTransparent}" />
+ </area>
+ <area x="0" y="0" width="100%" height="100%" layer="6">
+ <drawrectangle x="{areawidth}/2 + {menuwidth}*{areawidth}/100/2 + 4" y="{posy}*{areaheight}/100 + {totalheight}*{areaheight}/100 * {offset} / 1000 + 4" width="{areawidth}*0.02 - 8" height="{totalheight}*{areaheight}/100 * {height} / 1000 - 8" color="{clrWhite}" />
+ </area>
+ </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}" />
+
+ <drawtext condition="eq({lines}, 2)" align="center" y="5%" font="{semibold}" fontsize="40%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 2)" align="center" y="52%" font="{semibold}" fontsize="40%" color="{clrWhite}" text="{line2}" />
+
+ <drawtext condition="eq({lines}, 3)" align="center" y="0%" font="{semibold}" fontsize="28%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 3)" align="center" y="33%" font="{semibold}" fontsize="28%" color="{clrWhite}" text="{line2}" />
+ <drawtext condition="eq({lines}, 3)" align="center" y="66%" font="{semibold}" fontsize="28%" color="{clrWhite}" text="{line3}" />
+
+ <drawtext condition="eq({lines}, 4)" align="center" y="0%" font="{semibold}" fontsize="22%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 4)" align="center" y="25%" font="{semibold}" fontsize="22%" color="{clrWhite}" text="{line2}" />
+ <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
+ -->
+ <area condition="{buttonyesno}" layer="5">
+ <drawrectangle condition="not{current}" x="2%" y="5%" width="46%" height="90%" color="{clrDarkGray}"/>
+ <drawrectangle condition="not{current}" x="52%" y="5%" width="46%" height="90%" color="{clrDarkGray}"/>
+ <drawrectangle condition="{current}++{yes}" x="2%" y="5%" width="46%" height="90%" color="{clrTransBlueLight}"/>
+ <drawrectangle condition="{current}++{yes}" x="52%" y="5%" width="46%" height="90%" color="{clrDarkGray}"/>
+ <drawrectangle condition="{current}++not{yes}" x="2%" y="5%" width="46%" height="90%" color="{clrDarkGray}"/>
+ <drawrectangle condition="{current}++not{yes}" x="52%" y="5%" width="46%" height="90%" color="{clrTransBlueLight}"/>
+ </area>
+ <area condition="{buttonyesno}" layer="6">
+ <drawtext name="yestext" x="{areawidth}/4 - {width(yestext)}/2" valign="center" font="{light}" fontsize="70%" color="{clrWhite}" text="{textyes}" />
+ <drawtext name="notext" x="3*{areawidth}/4 - {width(notext)}/2" valign="center" font="{light}" fontsize="70%" color="{clrWhite}" text="{textno}" />
+ </area>
+ <!-- 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
+ -->
+ <area condition="{textinput}" layer="6">
+ <drawtext x="1%" y="10%" font="{light}" fontsize="40%" color="{clrWhite}" text="{text}" />
+ <drawrectangle condition="not{editmode}" x="1%" y="55%" width="98%" height="40%" color="{clrWhite}"/>
+ <drawrectangle condition="{editmode}" x="1%" y="55%" width="98%" height="40%" color="{clrRed}"/>
+ </area>
+ <area condition="{textinput}" layer="7">
+ <drawtext align="right" y="55%" font="{light}" fontsize="40%" color="{clrBlack}" text="{value} " />
+ </area>
+ <!-- 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" />
+ <drawtext name="channelnumberlogo" condition="{channellogoexisis}" x="{areawidth}-{areaheight}-{width(channelnumberlogo)}-10" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{channelnumber}" />
+ <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
+ -->
+ <area condition="{weekdayselector}" layer="6">
+ <drawtext x="1%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
+
+ <drawrectangle x="{areawidth} - {areaheight}*4" y="25%" width="{areaheight}*3.5" height="50%" color="{clrWhite}" />
+
+ <drawrectangle condition="not{day0set}" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrDarkGray}" />
+ <drawrectangle condition="{day0set}" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlueLight}" />
+
+ <drawrectangle condition="not{day1set}" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrDarkGray}" />
+ <drawrectangle condition="{day1set}" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlueLight}" />
+
+ <drawrectangle condition="not{day2set}" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrDarkGray}" />
+ <drawrectangle condition="{day2set}" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlueLight}" />
+
+ <drawrectangle condition="not{day3set}" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrDarkGray}" />
+ <drawrectangle condition="{day3set}" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlueLight}" />
+
+ <drawrectangle condition="not{day4set}" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrDarkGray}" />
+ <drawrectangle condition="{day4set}" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlueLight}" />
+
+ <drawrectangle condition="not{day5set}" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrDarkGray}" />
+ <drawrectangle condition="{day5set}" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlueLight}" />
+
+ <drawrectangle condition="not{day6set}" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrDarkGray}" />
+ <drawrectangle condition="{day6set}" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlueLight}" />
+ </area>
+ <area condition="{weekdayselector}" layer="7">
+ <drawrectangle condition="{current}++eq({dayselected}, 0)" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlack}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 1)" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlack}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 2)" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlack}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 3)" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlack}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 4)" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlack}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 5)" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlack}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 6)" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransBlack}" />
+
+ <drawtext name="day0" x="{areawidth} - {areaheight}*4.0 + {areaheight}/4 - {width(day0)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day0abbr}" />
+ <drawtext name="day1" x="{areawidth} - {areaheight}*3.5 + {areaheight}/4 - {width(day1)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day1abbr}" />
+ <drawtext name="day2" x="{areawidth} - {areaheight}*3.0 + {areaheight}/4 - {width(day2)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day2abbr}" />
+ <drawtext name="day3" x="{areawidth} - {areaheight}*2.5 + {areaheight}/4 - {width(day3)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day3abbr}" />
+ <drawtext name="day4" x="{areawidth} - {areaheight}*2.0 + {areaheight}/4 - {width(day4)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day4abbr}" />
+ <drawtext name="day5" x="{areawidth} - {areaheight}*1.5 + {areaheight}/4 - {width(day5)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day5abbr}" />
+ <drawtext name="day6" x="{areawidth} - {areaheight}*1.0 + {areaheight}/4 - {width(day6)}/2" valign="center" font="{light}" fontsize="50%" color="{clrWhite}" text="{day6abbr}" />
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timerconflictheader}" layer="5">
+ <drawtext name="title" x="{areawidth}*0.7*0.5 - {width(title)}/2" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{text}" />
+ <drawrectangle x="70%" y="0" width="30%" height="100%" color="{clrWhite}"/>
+ </area>
+ <area condition="{timerconflictheader}" layer="6">
+ <drawtext x="{areawidth}*0.7" y="0" font="{light}" fontsize="50%" color="{clrBlack}" text="{conflictstart}" />
+ <drawtext align="right" y="0" font="{light}" fontsize="50%" color="{clrBlack}" text="{conflictstop}" />
+ <drawtext name="olstart" x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100 - 70" y="50%" font="{light}" fontsize="50%" color="{clrRed}" text="{overlapstart}" />
+ <drawtext x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100 + {overlapwidthpercent}*{areawidth}*0.3/100 + 5" y="50%" font="{light}" fontsize="50%" color="{clrRed}" text="{overlapstop}" />
+ <drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="50%" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="50%" color="{clrRedTrans}"/>
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timerconflict}" layer="5">
+ <drawimage condition="not{current}" imagetype="skinpart" path="menubutton" x="0" y="0" width="70%" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="menubuttonactive" x="0" y="0" width="70%" height="100%"/>
+ </area>
+ <area condition="{timerconflict}" layer="6">
+ <drawimage condition="{current}++{infoactive}" imagetype="icon" path="ico_info_active" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{infoactive}" imagetype="icon" path="ico_info_inactive" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{deleteactive}" imagetype="icon" path="ico_delete_active" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{deleteactive}" imagetype="icon" path="ico_delete_inactive" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{editactive}" imagetype="icon" path="ico_edit_active" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{editactive}" imagetype="icon" path="ico_edit_inactive" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{searchactive}" imagetype="icon" path="ico_search_active" x="{areaheight}*1.7" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{searchactive}" imagetype="icon" path="ico_search_inactive" x="{areaheight}*1.7" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawtext x="{areaheight}*2.3" width="{areawidth}*0.7 - {areaheight}*2.4" y="0" font="{regular}" fontsize="40%" color="{clrWhite}" text="{timertitle}" />
+ <drawtext x="{areaheight}*2.3" y="40%" font="{light}" fontsize="30%" color="{clrWhite}" text="{weekday} {date} {starttime} - {stoptime}" />
+ <drawtext x="{areaheight}*2.3" y="70%" font="{light}" fontsize="30%" color="{clrWhite}" text="{channelname}, Transp. {transponder}" />
+ <drawrectangle x="70%" y="0" width="30%" height="100%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.7 + {timerstartpercent}*{areawidth}*0.3/100" y="30%" width="{timerwidthpercent}*{areawidth}*0.3/100" height="40%" color="{clrBlack}"/>
+ </area>
+ <area condition="{timerconflict}" layer="7">
+ <drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="0" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="100%" color="{clrRedTrans}"/>
+ </area>
+ <!-- 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"/>
+ <drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="{areaheight}*0.8" valign="center" width="{areaheight}" height="{areaheight}" />
+ <drawtext x="{areaheight}*2.2" y="2" font="{light}" fontsize="30%" color="{clrWhite}" text="{weekday} {date} {starttime} - {stoptime} {channelname}" />
+ <drawtext x="{areaheight}*2.2" y="30%" width="{areawidth} - 3*{areaheight}" font="{regular}" fontsize="45%" color="{clrWhite}" text="{title}" />
+ <drawtext x="{areaheight}*2.2" y="69%" width="{areawidth} - 3*{areaheight}" font="{light}" fontsize="30%" color="{clrWhite}" text="{shorttext}" />
+ <drawimage condition="{current}++not{hastimer}" imagetype="icon" path="ico_record_active" x="{areawidth} - {areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <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"/>
+ <drawimage condition="{current}++{editactive}" imagetype="icon" path="ico_edit_active" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{editactive}" imagetype="icon" path="ico_edit_inactive" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{deleteactive}" imagetype="icon" path="ico_delete_active" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{deleteactive}" imagetype="icon" path="ico_delete_inactive" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawtext x="{areaheight}*1.8" width="{areawidth} - {areaheight}*2" y="5%" font="{regular}" fontsize="45%" color="{clrWhite}" text="{searchstring}" />
+ <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
+ -->
+ <area condition="{timelineheader}" layer="5">
+ <drawtext align="center" y="1%" font="{regular}" fontsize="35%" color="{clrWhite}" text="Timer for {date}" />
+ <drawrectangle x="{areawidth}*0.05" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.0875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.1625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.2" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.2375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.275" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.3125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.35" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.3875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.425" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.4625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.5" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.5375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.575" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.6125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.65" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.6875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.725" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.7625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.8" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.8375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.9125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ </area>
+ <area condition="{timelineheader}" layer="6">
+ <drawtext name="text0" x="{areawidth}*0.05 + {areawidth}*0.0375/2 - {width(text0)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="0"/>
+ <drawtext name="text1" x="{areawidth}*0.0875 + {areawidth}*0.0375/2 - {width(text1)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="1"/>
+ <drawtext name="text2" x="{areawidth}*0.125 + {areawidth}*0.0375/2 - {width(text2)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="2"/>
+ <drawtext name="text3" x="{areawidth}*0.1625 + {areawidth}*0.0375/2 - {width(text3)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="3"/>
+ <drawtext name="text4" x="{areawidth}*0.2 + {areawidth}*0.0375/2 - {width(text4)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="4"/>
+ <drawtext name="text5" x="{areawidth}*0.2375 + {areawidth}*0.0375/2 - {width(text5)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="5"/>
+ <drawtext name="text6" x="{areawidth}*0.275 + {areawidth}*0.0375/2 - {width(text6)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="6"/>
+ <drawtext name="text7" x="{areawidth}*0.3125 + {areawidth}*0.0375/2 - {width(text7)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="7"/>
+ <drawtext name="text8" x="{areawidth}*0.35 + {areawidth}*0.0375/2 - {width(text8)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="8"/>
+ <drawtext name="text9" x="{areawidth}*0.3875 + {areawidth}*0.0375/2 - {width(text9)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="9"/>
+ <drawtext name="text10" x="{areawidth}*0.425 + {areawidth}*0.0375/2 - {width(text10)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="10"/>
+ <drawtext name="text11" x="{areawidth}*0.4625 + {areawidth}*0.0375/2 - {width(text11)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="11"/>
+ <drawtext name="text12" x="{areawidth}*0.5 + {areawidth}*0.0375/2 - {width(text12)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="12"/>
+ <drawtext name="text13" x="{areawidth}*0.5375 + {areawidth}*0.0375/2 - {width(text13)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="13"/>
+ <drawtext name="text14" x="{areawidth}*0.575 + {areawidth}*0.0375/2 - {width(text14)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="14"/>
+ <drawtext name="text15" x="{areawidth}*0.6125 + {areawidth}*0.0375/2 - {width(text15)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="15"/>
+ <drawtext name="text16" x="{areawidth}*0.65 + {areawidth}*0.0375/2 - {width(text16)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="16"/>
+ <drawtext name="text17" x="{areawidth}*0.6875 + {areawidth}*0.0375/2 - {width(text17)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="17"/>
+ <drawtext name="text18" x="{areawidth}*0.725 + {areawidth}*0.0375/2 - {width(text18)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="18"/>
+ <drawtext name="text19" x="{areawidth}*0.7625 + {areawidth}*0.0375/2 - {width(text19)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="19"/>
+ <drawtext name="text20" x="{areawidth}*0.8 + {areawidth}*0.0375/2 - {width(text20)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="20"/>
+ <drawtext name="text21" x="{areawidth}*0.8375 + {areawidth}*0.0375/2 - {width(text21)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="21"/>
+ <drawtext name="text22" x="{areawidth}*0.875 + {areawidth}*0.0375/2 - {width(text22)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrWhite}" text="22"/>
+ <drawtext name="text23" x="{areawidth}*0.9125 + {areawidth}*0.0375/2 - {width(text23)}/2" y="80%" font="{regular}" fontsize="20%" color="{clrBlack}" text="23"/>
+ </area>
+ <area condition="{timelineheader}++{timerset}" layer="6">
+ <drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="1%" y="30%" width="{areaheight}*0.5" height="{areaheight}*0.5" />
+ <drawtext condition="not{channellogoexisis}" x="1%" width="{areaheight}*0.7" y="40%" font="{light}" fontsize="20%" color="{clrWhite}" text="{channelname}"/>
+ <drawtext x="{areaheight}*0.8" y="36%" font="{light}" fontsize="25%" color="{clrWhite}" text="{eventstart} - {eventstop} (Rec. {timerstart} - {timerstop}), Transp. {channeltransponder}"/>
+ <drawtext x="{areaheight}*0.8" y="57%" width="{areawidth}-{areaheight}" font="{light}" fontsize="25%" color="{clrWhite}" text="{eventtitle} - {eventshorttext}"/>
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timelinetimer}" layer="5">
+ <drawrectangle condition="{current}" x="5%" y="0" width="90%" height="100%" color="{clrTransBlueLight}"/>
+ <drawrectangle condition="not{current}" x="5%" y="0" width="90%" height="100%" color="{clrDarkGray}"/>
+ <drawrectangle x="5%" y="{areaheight}-1" width="90%" height="1" color="{clrBlack}"/>
+ </area>
+ <area condition="{timelinetimer}" layer="6">
+ <drawrectangle x="{areawidth}*0.05 + {timerstart}*{areawidth}*0.9/1000" y="25%" width="{timerwidth}*{areawidth}*0.9/1000" height="50%" color="{clrBlack}"/>
+ </area>
+ <!-- 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"/>
+ <drawtext x="{areaheight}" valign="center" font="{light}" width="{areawidth} - {areaheight}" fontsize="80%" color="{clrWhite}" text="{favdesc}" />
+ </area>
+ </grid>
+</displayplugin>
diff --git a/skins/metrixhd/xmlfiles/plug-tvguideng-root.xml b/skins/metrixhd/xmlfiles/plug-tvguideng-root.xml
new file mode 100644
index 0000000..5de0069
--- /dev/null
+++ b/skins/metrixhd/xmlfiles/plug-tvguideng-root.xml
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
+
+<displayplugin x="3%" y="5%" width="94%" height="90%">
+
+ <viewelement name="background_hor">
+ <area x="0" y="0" width="100%" height="100%" layer="1">
+ <fill color="{clrTransBlack}" />
+ </area>
+ <area x="70%" y="0" width="15%" height="12%" layer="1">
+ <fill color="{clrTransBlueLight}" />
+ </area>
+ <area x="0" y="20%" width="15%" height="5%" layer="2">
+ <drawrectangle x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}"/>
+ </area>
+ </viewelement>
+
+ <viewelement name="background_ver">
+ <area x="0" y="0" width="100%" height="100%" layer="1">
+ <fill color="{clrTransBlack}" />
+ </area>
+ <area x="70%" y="0" width="15%" height="12%" layer="1">
+ <fill color="{clrTransBlueLight}" />
+ </area>
+ <area x="0" y="20%" width="8%" height="15%" layer="2">
+ <drawrectangle x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}"/>
+ </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">
+ <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}" />
+ <drawtext x="0" y="20%" font="{semibold}" width="100%" fontsize="30%" color="{clrWhite}" text="{title}" />
+ <drawtextbox name="shorttext" x="0" y="50%" width="100%" font="{light}" fontsize="20%" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox x="0" y="{posy(shorttext)} + {height(shorttext)} - {areaheight}*0.15" width="100%" font="{light}" fontsize="20%" color="{clrWhite}" text="{description}" />
+ </areascroll>
+ <area condition="not{isdummy}++{hasposter}" x="1%" y="1%" width="{areaheight}*0.2*{posterwidth}/{posterheight}" height="19%" layer="2">
+ <drawimage imagetype="image" path="{posterpath}" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <areascroll condition="not{isdummy}++{hasposter}" orientation="vertical" mode="forthandback" delay="1000" scrollspeed="medium" x="12%" y="1%" width="56%" height="19%" layer="2">
+ <drawtext x="0" y="0" font="{semibold}" width="100%" fontsize="25%" color="{clrWhite}" text="{day} {daynumeric}.{month} {start} - {stop}" />
+ <drawtext x="0" y="20%" font="{semibold}" width="100%" fontsize="30%" color="{clrWhite}" text="{title}" />
+ <drawtextbox name="shorttext" x="0" y="50%" width="100%" font="{light}" fontsize="20%" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox x="0" y="{posy(shorttext)} + {height(shorttext)} - {areaheight}*0.15" width="100%" font="{light}" fontsize="20%" color="{clrWhite}" text="{description}" />
+ </areascroll>
+ <area condition="{isdummy}" x="1%" y="1%" width="68%" height="19%" layer="2">
+ <drawtext x="0" y="20%" font="{semibold}" width="100%" fontsize="35%" color="{clrWhite}" text="{title}" />
+ </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">
+ <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>
+ </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">
+ <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}" />
+ <drawtext align="right" y="45%" font="{light}" fontsize="45%" color="{clrWhite}" text="{day}. {monthnameshort}" />
+ </area>
+ <area x="85%" y="0" width="15%" height="12%" layer="2">
+ <drawtext align="center" valign="center" font="{light}" fontsize="75%" color="{clrWhite}" text="{time}" />
+ </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}" />
+ </area>
+ </viewelement>
+
+ <viewelement name="datetimeline_ver">
+ <area x="0" y="20%" width="8%" height="15%" layer="2">
+ <drawtext align="center" y="10%" font="{light}" fontsize="40%" color="{clrWhite}" text="{weekday}" />
+ <drawtext align="center" y="50%" font="{light}" fontsize="40%" color="{clrWhite}" text="{date}" />
+ </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}" />
+ </area>
+ </viewelement>
+
+ <viewelement name="timeindicator_ver">
+ <area x="0" y="35%" width="100%" height="57%" layer="3">
+ <drawrectangle x="0" y="{percenttotal}*{areaheight}/1000" width="100%" height="1" color="{clrRed}" />
+ </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="2">
+ <drawrectangle condition="{fullhour}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransWhite}"/>
+ <drawrectangle condition="not{fullhour}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}" />
+ </area>
+ <area layer="2">
+ <drawtext condition="{fullhour}" x="5%" valign="center" font="{light}" fontsize="80%" color="{clrBlack}" text="{timestring}" />
+ <drawtext condition="not{fullhour}" x="5%" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{timestring}" />
+ </area>
+ </grid>
+
+ <grid name="timeline_ver" x="0" y="35%" width="8%" height="57%">
+ <area layer="2">
+ <drawrectangle condition="{fullhour}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransWhite}"/>
+ <drawrectangle condition="not{fullhour}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}" />
+ </area>
+ <area layer="2">
+ <drawtext condition="{fullhour}" align="center" y="5%" font="{light}" fontsize="70%" color="{clrBlack}" text="{timestring}" />
+ <drawtext condition="not{fullhour}" align="center" y="5%" font="{light}" fontsize="70%" color="{clrWhite}" text="{timestring}" />
+ </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%" />
+ <drawtext condition="not{channellogoexists}" x="1%" valign="center" width="98%" font="{light}" fontsize="45%" color="{clrWhite}" text="{name}" />
+ </area>
+ </grid>
+
+ <grid name="channels_ver" x="8%" y="25%" width="92%" height="10%">
+ <area layer="2">
+ <drawimage condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" align="center" valign="center" width="80%" height="80%" />
+ <drawtext condition="not{channellogoexists}" align="center" valign="center" width="98%" font="{light}" fontsize="45%" color="{clrWhite}" text="{name}" />
+ </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}" />
+ <drawrectangle condition="not{color}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrDarkGray}" />
+ </area>
+ <area layer="3">
+ <drawtextvertical align="center" valign="center" font="{semibold}" fontsize="50%" color="{clrWhite}" text="{group}" />
+ </area>
+ </grid>
+
+ <grid name="channelgroups_ver" x="8%" y="20%" width="92%" height="5%">
+ <area layer="2">
+ <drawrectangle condition="{color}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}" />
+ <drawrectangle condition="not{color}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrDarkGray}" />
+ </area>
+ <area layer="3">
+ <drawtext align="center" valign="center" font="{semibold}" fontsize="90%" color="{clrWhite}" text="{group}" />
+ </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}" />
+ <drawrectangle condition="not{color}++not{current}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrDarkGray}" />
+ <drawrectangle condition="{current}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlueLight}" />
+ </area>
+ <area layer="3">
+ <drawtext condition="not{dummy}" x="3" y="2%" font="{light}" fontsize="45%" color="{clrWhite}" text="{start} - {stop}" />
+ <drawtext condition="not{dummy}" x="3" y="40%" width="{areawidth}-6" font="{semibold}" fontsize="55%" color="{clrWhite}" text="{title}" />
+ <drawtext condition="{dummy}" x="3" valign="center" width="98%" font="{semibold}" fontsize="55%" color="{clrWhite}" text="{title}" />
+ <drawimage condition="{timer}" imagetype="icon" path="ico_rec_on" x="{areawidth} - {areaheight}*0.32*45/23" y="68%" width="{areaheight}*0.3*45/23" height="{areaheight}*0.3"/>
+ <drawimage condition="{switchtimer}++not{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.32*45/23" y="68%" width="{areaheight}*0.3*45/23" height="{areaheight}*0.3"/>
+ <drawimage condition="{switchtimer}++{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.32*45/23*2 - 5" y="68%" width="{areaheight}*0.3*45/23" height="{areaheight}*0.3" />
+ </area>
+ </grid>
+
+ <grid name="schedules_ver" x="8%" y="35%" width="92%" height="57%">
+ <area layer="2">
+ <drawrectangle condition="{color}++not{current}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlack}" />
+ <drawrectangle condition="not{color}++not{current}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrDarkGray}" />
+ <drawrectangle condition="{current}" x="1" y="1" width="{areawidth}-2" height="{areaheight}-2" color="{clrTransBlueLight}" />
+ </area>
+ <area layer="3">
+ <drawtext condition="not{dummy}" x="3" y="2%" font="{light}" fontsize="{areawidth}*0.16" color="{clrWhite}" text="{start} - {stop}" />
+ <drawtextbox name="title" condition="not{dummy}" x="2%" y="{areawidth}*0.16" width="96%" font="{semibold}" fontsize="{areawidth}*0.15" color="{clrWhite}" text="{title}" />
+ <drawtextbox condition="not{dummy}" x="2%" y="{posy(title)} + {height(title)} - {areawidth}*0.1" width="96%" height="{areaheight}*1.1 - {posy(title)} - {height(title)}" font="{light}" fontsize="{areawidth}*0.12" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox condition="{dummy}" x="2%" y="5%" width="96%" font="{regular}" fontsize="{areawidth}*0.2" color="{clrWhite}" text="{title}" />
+ <drawimage condition="{timer}" imagetype="icon" path="ico_rec_on" x="{areawidth} - {areaheight}*0.32*45/23" y="68%" width="{areaheight}*0.3*45/23" height="{areaheight}*0.3"/>
+ <drawimage condition="{switchtimer}++not{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.32*45/23" y="68%" width="{areaheight}*0.3*45/23" height="{areaheight}*0.3"/>
+ <drawimage condition="{switchtimer}++{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.32*45/23*2 - 5" y="68%" width="{areaheight}*0.3*45/23" height="{areaheight}*0.3" />
+ </area>
+ </grid>
+
+ <!-- Tokens available in channeljump
+ {channel} current user input for channel jump
+ -->
+ <viewelement name="channeljump">
+ </viewelement>
+
+</displayplugin>
diff --git a/skins/nopacity/themes/darkred/icons/ico_arrow_left.png b/skins/nopacity/themes/darkred/icons/ico_arrow_left.png
new file mode 100644
index 0000000..57800c7
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_arrow_left.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_arrow_right.png b/skins/nopacity/themes/darkred/icons/ico_arrow_right.png
new file mode 100644
index 0000000..ea45f3a
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_arrow_right.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_delete_active.png b/skins/nopacity/themes/darkred/icons/ico_delete_active.png
new file mode 100644
index 0000000..f473717
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_delete_active.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_delete_inactive.png b/skins/nopacity/themes/darkred/icons/ico_delete_inactive.png
new file mode 100644
index 0000000..21b0a88
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_delete_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_edit_active.png b/skins/nopacity/themes/darkred/icons/ico_edit_active.png
new file mode 100644
index 0000000..ec39699
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_edit_active.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_edit_inactive.png b/skins/nopacity/themes/darkred/icons/ico_edit_inactive.png
new file mode 100644
index 0000000..71f016c
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_edit_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_info_active.png b/skins/nopacity/themes/darkred/icons/ico_info_active.png
new file mode 100644
index 0000000..c88f76d
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_info_active.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_info_inactive.png b/skins/nopacity/themes/darkred/icons/ico_info_inactive.png
new file mode 100644
index 0000000..37eeed2
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_info_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_rec_on.svg b/skins/nopacity/themes/darkred/icons/ico_rec_on.svg
new file mode 100644
index 0000000..91b3e31
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_rec_on.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="45"
+ height="23"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91pre2 r13516"
+ viewBox="0 0 45 23"
+ sodipodi:docname="ico_rec.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6"
+ inkscape:cx="-13.27009"
+ inkscape:cy="16.082332"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1846"
+ inkscape:window-height="1058"
+ inkscape:window-x="66"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1029.3622)">
+ <rect
+ style="fill:#d40000;fill-opacity:1;stroke:#ececec;stroke-width:0;stroke-miterlimit:5.69999981;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4148"
+ width="45"
+ height="23"
+ x="4.9999999e-006"
+ y="1029.3622"
+ ry="8.9285717" />
+ <g
+ style="font-style:normal;font-weight:normal;font-size:13.75px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text4151">
+ <path
+ d="m 18.185688,1046.1122 -1.725464,0 -3.343506,-3.9746 -1.873169,0 0,3.9746 -1.3293454,0 0,-9.997 2.7996824,0 q 0.906372,0 1.51062,0.1209 0.604248,0.1141 1.087647,0.4162 0.543823,0.3425 0.845947,0.8661 0.308838,0.517 0.308838,1.316 0,1.0809 -0.543823,1.8127 -0.543823,0.7251 -1.497193,1.0944 l 3.759766,4.3707 z m -3.10852,-7.1839 q 0,-0.4296 -0.154419,-0.7586 -0.147706,-0.3357 -0.496827,-0.564 -0.288696,-0.1947 -0.684814,-0.2685 -0.396118,-0.081 -0.933228,-0.081 l -1.564331,0 0,3.7732 1.342774,0 q 0.631103,0 1.101074,-0.1074 0.469971,-0.1142 0.79895,-0.4163 0.302124,-0.282 0.443115,-0.6445 0.147706,-0.3693 0.147706,-0.9333 z"
+ style="font-size:13.75px;fill:#ffffff"
+ id="path4156" />
+ <path
+ d="m 26.061054,1046.1122 -6.586303,0 0,-9.997 6.586303,0 0,1.1817 -5.256958,0 0,2.7392 5.256958,0 0,1.1817 -5.256958,0 0,3.7127 5.256958,0 0,1.1817 z"
+ style="font-size:13.75px;fill:#ffffff"
+ id="path4158" />
+ <path
+ d="m 35.89687,1045.3871 q -0.369263,0.1611 -0.671387,0.3021 -0.29541,0.141 -0.778809,0.2954 -0.409546,0.1276 -0.892944,0.2149 -0.476685,0.094 -1.054077,0.094 -1.087647,0 -1.980591,-0.3022 -0.88623,-0.3088 -1.544189,-0.96 -0.644532,-0.6379 -1.00708,-1.6181 -0.362549,-0.9869 -0.362549,-2.2894 0,-1.2354 0.349121,-2.2089 0.349121,-0.9735 1.00708,-1.6449 0.637817,-0.6512 1.537475,-0.9936 0.906373,-0.3424 2.007447,-0.3424 0.805664,0 1.604614,0.1947 0.805664,0.1947 1.785889,0.6848 l 0,1.5777 -0.100708,0 q -0.825806,-0.6915 -1.638184,-1.007 -0.812378,-0.3156 -1.738892,-0.3156 -0.758667,0 -1.369628,0.2484 -0.604248,0.2417 -1.080933,0.7587 -0.463257,0.5035 -0.725098,1.2756 -0.255127,0.7654 -0.255127,1.7725 0,1.0541 0.281983,1.8127 0.288696,0.7587 0.738525,1.2354 0.469971,0.4968 1.09436,0.7385 0.631104,0.235 1.329346,0.235 0.960083,0 1.799317,-0.329 0.839233,-0.329 1.571045,-0.9869 l 0.09399,0 0,1.5576 z"
+ style="font-size:13.75px;fill:#ffffff"
+ id="path4160" />
+ </g>
+ </g>
+</svg>
diff --git a/skins/nopacity/themes/darkred/icons/ico_record_active.png b/skins/nopacity/themes/darkred/icons/ico_record_active.png
new file mode 100644
index 0000000..476da99
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_record_active.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_record_inactive.png b/skins/nopacity/themes/darkred/icons/ico_record_inactive.png
new file mode 100644
index 0000000..2a91da3
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_record_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_search_active.png b/skins/nopacity/themes/darkred/icons/ico_search_active.png
new file mode 100644
index 0000000..7bf7bc7
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_search_active.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_search_inactive.png b/skins/nopacity/themes/darkred/icons/ico_search_inactive.png
new file mode 100644
index 0000000..4a210bb
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_search_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/icons/ico_switchtimer.svg b/skins/nopacity/themes/darkred/icons/ico_switchtimer.svg
new file mode 100644
index 0000000..f3ef884
--- /dev/null
+++ b/skins/nopacity/themes/darkred/icons/ico_switchtimer.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="45"
+ height="23"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91pre2 r13516"
+ viewBox="0 0 45 23"
+ sodipodi:docname="ico_switchtimer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6"
+ inkscape:cx="-13.27009"
+ inkscape:cy="16.082332"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1846"
+ inkscape:window-height="1058"
+ inkscape:window-x="66"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1029.3622)">
+ <rect
+ style="fill:#ff7f2a;fill-opacity:1;stroke:#ececec;stroke-width:0;stroke-miterlimit:5.69999981;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4148"
+ width="45"
+ height="23"
+ x="4.9999999e-006"
+ y="1029.3622"
+ ry="8.9285717" />
+ <g
+ style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text4150">
+ <path
+ d="m 9.2532783,1042.4468 q 0,0.531 -0.2502442,1.0498 -0.2441406,0.5188 -0.6896973,0.8789 -0.4882812,0.3906 -1.1413574,0.6103 -0.6469726,0.2198 -1.5625,0.2198 -0.982666,0 -1.7700195,-0.1831 -0.78125,-0.1831 -1.5930176,-0.5433 l 0,-1.5136 0.085449,0 q 0.6896973,0.5737 1.5930176,0.885 0.9033203,0.3113 1.6967774,0.3113 1.1230468,0 1.7456054,-0.4212 0.6286621,-0.4211 0.6286621,-1.123 0,-0.6043 -0.2990722,-0.8911 -0.2929688,-0.2869 -0.8972168,-0.4456 -0.4577637,-0.1221 -0.9948731,-0.2014 -0.5310058,-0.079 -1.1291504,-0.2014 -1.2084961,-0.2564 -1.7944336,-0.8728 -0.5798339,-0.6226 -0.5798339,-1.6175 0,-1.1413 0.9643554,-1.8676 0.9643555,-0.7325 2.4475098,-0.7325 0.9582519,0 1.7578125,0.1831 0.7995605,0.1832 1.4160156,0.4517 l 0,1.4282 -0.085449,0 q -0.5187988,-0.4394 -1.3671875,-0.7263 -0.8422852,-0.293 -1.7272949,-0.293 -0.970459,0 -1.5625,0.4029 -0.5859375,0.4028 -0.5859375,1.0376 0,0.5676 0.2929687,0.8911 0.2929688,0.3235 1.0314942,0.4944 0.390625,0.085 1.1108398,0.2075 0.7202149,0.1221 1.2207031,0.2502 1.0131836,0.2686 1.5258789,0.8118 0.5126954,0.5432 0.5126954,1.5198 z"
+ style=""
+ id="path4138" />
+ <path
+ d="m 19.678083,1038.2231 -1.776123,6.8177 -1.062012,0 -1.751709,-5.2552 -1.739502,5.2552 -1.055908,0 -1.794434,-6.8177 1.19629,0 1.25122,5.2796 1.702881,-5.2796 0.946045,0 1.745605,5.2796 1.184082,-5.2796 1.153565,0 z"
+ style=""
+ id="path4140" />
+ <path
+ d="m 22.565046,1037.0818 -1.293945,0 0,-1.1902 1.293945,0 0,1.1902 z m -0.07324,7.959 -1.147461,0 0,-6.8177 1.147461,0 0,6.8177 z"
+ style=""
+ id="path4142" />
+ <path
+ d="m 28.265729,1044.9797 q -0.323486,0.085 -0.708007,0.1404 -0.378418,0.055 -0.677491,0.055 -1.043701,0 -1.586914,-0.5615 -0.543213,-0.5615 -0.543213,-1.8005 l 0,-3.6255 -0.775146,0 0,-0.9644 0.775146,0 0,-1.9592 1.147461,0 0,1.9592 2.368164,0 0,0.9644 -2.368164,0 0,3.1067 q 0,0.5371 0.02441,0.8423 0.02441,0.299 0.170899,0.5615 0.134277,0.2441 0.366211,0.3601 0.238037,0.1099 0.720215,0.1099 0.280761,0 0.585937,-0.079 0.305176,-0.085 0.439453,-0.1404 l 0.06104,0 0,1.0315 z"
+ style=""
+ id="path4144" />
+ <path
+ d="m 34.698835,1044.6135 q -0.573731,0.2747 -1.092529,0.4273 -0.512696,0.1526 -1.09253,0.1526 -0.738525,0 -1.35498,-0.2137 -0.616455,-0.2197 -1.055908,-0.6591 -0.445557,-0.4395 -0.689698,-1.1109 -0.24414,-0.6714 -0.24414,-1.5686 0,-1.6723 0.915527,-2.6245 0.921631,-0.9521 2.429199,-0.9521 0.585938,0 1.147461,0.1647 0.567627,0.1648 1.037598,0.4029 l 0,1.2756 -0.06104,0 q -0.524903,-0.4089 -1.086426,-0.6286 -0.55542,-0.2198 -1.086426,-0.2198 -0.976562,0 -1.544189,0.6592 -0.561524,0.6531 -0.561524,1.9226 0,1.2329 0.549317,1.8982 0.55542,0.6592 1.556396,0.6592 0.347901,0 0.708008,-0.092 0.360107,-0.091 0.646973,-0.238 0.250244,-0.1282 0.46997,-0.2686 0.219727,-0.1464 0.347901,-0.2502 l 0.06104,0 0,1.2634 z"
+ style=""
+ id="path4146" />
+ <path
+ d="m 41.876569,1045.0408 -1.147461,0 0,-3.8819 q 0,-0.4699 -0.05493,-0.8789 -0.05493,-0.415 -0.201416,-0.6469 -0.152588,-0.2564 -0.439453,-0.3785 -0.286866,-0.1281 -0.744629,-0.1281 -0.469971,0 -0.982666,0.2319 -0.512696,0.2319 -0.982666,0.592 l 0,5.0904 -1.147461,0 0,-9.4971 1.147461,0 0,3.4363 q 0.537109,-0.4456 1.110839,-0.6958 0.573731,-0.2503 1.177979,-0.2503 1.104736,0 1.68457,0.6653 0.579834,0.6653 0.579834,1.9165 l 0,4.4251 z"
+ style=""
+ id="path4148" />
+ </g>
+ </g>
+</svg>
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_button.png b/skins/nopacity/themes/darkred/skinparts/tvguide_button.png
new file mode 100644
index 0000000..7234f08
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_button.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_button_active.png b/skins/nopacity/themes/darkred/skinparts/tvguide_button_active.png
new file mode 100644
index 0000000..ba09ea0
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_button_active.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_bottom.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_bottom.png
new file mode 100644
index 0000000..7127ea7
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_bottom.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_head.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_head.png
new file mode 100644
index 0000000..bce9d22
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_head.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_horizontal.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_horizontal.png
new file mode 100644
index 0000000..13d733c
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_left.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_left.png
new file mode 100644
index 0000000..df495b1
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_left.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_right.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_right.png
new file mode 100644
index 0000000..42dcf6d
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_right.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_vertical.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_vertical.png
new file mode 100644
index 0000000..43778d0
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channelgroup_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_horizontal.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_horizontal.png
new file mode 100644
index 0000000..d9bb54a
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_vertical.png b/skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_vertical.png
new file mode 100644
index 0000000..06684cc
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_channellogoback_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_clock.png b/skins/nopacity/themes/darkred/skinparts/tvguide_clock.png
new file mode 100644
index 0000000..2e8686e
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_clock.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_date_vertical.png b/skins/nopacity/themes/darkred/skinparts/tvguide_date_vertical.png
new file mode 100644
index 0000000..58a72e4
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_date_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_bottom.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_bottom.png
new file mode 100644
index 0000000..08de467
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_bottom.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_head.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_head.png
new file mode 100644
index 0000000..060a908
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_head.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_horizontal.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_horizontal.png
new file mode 100644
index 0000000..9319d6b
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_left.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_left.png
new file mode 100644
index 0000000..7852d94
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_left.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_right.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_right.png
new file mode 100644
index 0000000..73dfbd0
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_right.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_vertical.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_vertical.png
new file mode 100644
index 0000000..6d96d34
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_active_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_bottom.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_bottom.png
new file mode 100644
index 0000000..82c20c4
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_bottom.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_head.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_head.png
new file mode 100644
index 0000000..f434c11
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_head.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_horizontal.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_horizontal.png
new file mode 100644
index 0000000..6f28550
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_left.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_left.png
new file mode 100644
index 0000000..df80f91
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_left.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_right.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_right.png
new file mode 100644
index 0000000..d39470f
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_right.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_grid_vertical.png b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_vertical.png
new file mode 100644
index 0000000..6ad219d
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_grid_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_header.png b/skins/nopacity/themes/darkred/skinparts/tvguide_header.png
new file mode 100644
index 0000000..56a60a7
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_header.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_horizontal.png b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_horizontal.png
new file mode 100644
index 0000000..9240b37
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_vertical.png b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_vertical.png
new file mode 100644
index 0000000..dfa06c9
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinebright_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_horizontal.png b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_horizontal.png
new file mode 100644
index 0000000..4364677
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_vertical.png b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_vertical.png
new file mode 100644
index 0000000..5466546
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_timelinedark_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/skinparts/tvguide_tvframe.png b/skins/nopacity/themes/darkred/skinparts/tvguide_tvframe.png
new file mode 100644
index 0000000..261fea3
--- /dev/null
+++ b/skins/nopacity/themes/darkred/skinparts/tvguide_tvframe.png
Binary files differ
diff --git a/skins/nopacity/themes/darkred/theme.xml b/skins/nopacity/themes/darkred/theme.xml
index 56b7df4..a1d3eea 100644
--- a/skins/nopacity/themes/darkred/theme.xml
+++ b/skins/nopacity/themes/darkred/theme.xml
@@ -15,6 +15,7 @@
<color name="clrBorder">FF2B0000</color>
<color name="clrGray">FF858585</color>
<color name="clrBackground">B0000000</color>
+ <color name="clrBackgroundOpaque">FF000000</color>
<color name="clrTransBlack">99000000</color>
<color name="clrTransBlackDark">DF000000</color>
<color name="clrTransRed">99FF0000</color>
diff --git a/skins/nopacity/themes/default/icons/ico_arrow_left.png b/skins/nopacity/themes/default/icons/ico_arrow_left.png
new file mode 100644
index 0000000..57800c7
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_arrow_left.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_arrow_right.png b/skins/nopacity/themes/default/icons/ico_arrow_right.png
new file mode 100644
index 0000000..ea45f3a
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_arrow_right.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_delete_active.png b/skins/nopacity/themes/default/icons/ico_delete_active.png
new file mode 100644
index 0000000..f473717
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_delete_active.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_delete_inactive.png b/skins/nopacity/themes/default/icons/ico_delete_inactive.png
new file mode 100644
index 0000000..21b0a88
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_delete_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_edit_active.png b/skins/nopacity/themes/default/icons/ico_edit_active.png
new file mode 100644
index 0000000..ec39699
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_edit_active.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_edit_inactive.png b/skins/nopacity/themes/default/icons/ico_edit_inactive.png
new file mode 100644
index 0000000..71f016c
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_edit_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_info_active.png b/skins/nopacity/themes/default/icons/ico_info_active.png
new file mode 100644
index 0000000..c88f76d
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_info_active.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_info_inactive.png b/skins/nopacity/themes/default/icons/ico_info_inactive.png
new file mode 100644
index 0000000..37eeed2
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_info_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_no.png b/skins/nopacity/themes/default/icons/ico_no.png
new file mode 100644
index 0000000..47cdba0
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_no.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_rec_on.svg b/skins/nopacity/themes/default/icons/ico_rec_on.svg
new file mode 100644
index 0000000..91b3e31
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_rec_on.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="45"
+ height="23"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91pre2 r13516"
+ viewBox="0 0 45 23"
+ sodipodi:docname="ico_rec.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6"
+ inkscape:cx="-13.27009"
+ inkscape:cy="16.082332"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1846"
+ inkscape:window-height="1058"
+ inkscape:window-x="66"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1029.3622)">
+ <rect
+ style="fill:#d40000;fill-opacity:1;stroke:#ececec;stroke-width:0;stroke-miterlimit:5.69999981;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4148"
+ width="45"
+ height="23"
+ x="4.9999999e-006"
+ y="1029.3622"
+ ry="8.9285717" />
+ <g
+ style="font-style:normal;font-weight:normal;font-size:13.75px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text4151">
+ <path
+ d="m 18.185688,1046.1122 -1.725464,0 -3.343506,-3.9746 -1.873169,0 0,3.9746 -1.3293454,0 0,-9.997 2.7996824,0 q 0.906372,0 1.51062,0.1209 0.604248,0.1141 1.087647,0.4162 0.543823,0.3425 0.845947,0.8661 0.308838,0.517 0.308838,1.316 0,1.0809 -0.543823,1.8127 -0.543823,0.7251 -1.497193,1.0944 l 3.759766,4.3707 z m -3.10852,-7.1839 q 0,-0.4296 -0.154419,-0.7586 -0.147706,-0.3357 -0.496827,-0.564 -0.288696,-0.1947 -0.684814,-0.2685 -0.396118,-0.081 -0.933228,-0.081 l -1.564331,0 0,3.7732 1.342774,0 q 0.631103,0 1.101074,-0.1074 0.469971,-0.1142 0.79895,-0.4163 0.302124,-0.282 0.443115,-0.6445 0.147706,-0.3693 0.147706,-0.9333 z"
+ style="font-size:13.75px;fill:#ffffff"
+ id="path4156" />
+ <path
+ d="m 26.061054,1046.1122 -6.586303,0 0,-9.997 6.586303,0 0,1.1817 -5.256958,0 0,2.7392 5.256958,0 0,1.1817 -5.256958,0 0,3.7127 5.256958,0 0,1.1817 z"
+ style="font-size:13.75px;fill:#ffffff"
+ id="path4158" />
+ <path
+ d="m 35.89687,1045.3871 q -0.369263,0.1611 -0.671387,0.3021 -0.29541,0.141 -0.778809,0.2954 -0.409546,0.1276 -0.892944,0.2149 -0.476685,0.094 -1.054077,0.094 -1.087647,0 -1.980591,-0.3022 -0.88623,-0.3088 -1.544189,-0.96 -0.644532,-0.6379 -1.00708,-1.6181 -0.362549,-0.9869 -0.362549,-2.2894 0,-1.2354 0.349121,-2.2089 0.349121,-0.9735 1.00708,-1.6449 0.637817,-0.6512 1.537475,-0.9936 0.906373,-0.3424 2.007447,-0.3424 0.805664,0 1.604614,0.1947 0.805664,0.1947 1.785889,0.6848 l 0,1.5777 -0.100708,0 q -0.825806,-0.6915 -1.638184,-1.007 -0.812378,-0.3156 -1.738892,-0.3156 -0.758667,0 -1.369628,0.2484 -0.604248,0.2417 -1.080933,0.7587 -0.463257,0.5035 -0.725098,1.2756 -0.255127,0.7654 -0.255127,1.7725 0,1.0541 0.281983,1.8127 0.288696,0.7587 0.738525,1.2354 0.469971,0.4968 1.09436,0.7385 0.631104,0.235 1.329346,0.235 0.960083,0 1.799317,-0.329 0.839233,-0.329 1.571045,-0.9869 l 0.09399,0 0,1.5576 z"
+ style="font-size:13.75px;fill:#ffffff"
+ id="path4160" />
+ </g>
+ </g>
+</svg>
diff --git a/skins/nopacity/themes/default/icons/ico_record_active.png b/skins/nopacity/themes/default/icons/ico_record_active.png
new file mode 100644
index 0000000..476da99
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_record_active.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_record_inactive.png b/skins/nopacity/themes/default/icons/ico_record_inactive.png
new file mode 100644
index 0000000..2a91da3
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_record_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_search_active.png b/skins/nopacity/themes/default/icons/ico_search_active.png
new file mode 100644
index 0000000..7bf7bc7
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_search_active.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_search_inactive.png b/skins/nopacity/themes/default/icons/ico_search_inactive.png
new file mode 100644
index 0000000..4a210bb
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_search_inactive.png
Binary files differ
diff --git a/skins/nopacity/themes/default/icons/ico_switchtimer.svg b/skins/nopacity/themes/default/icons/ico_switchtimer.svg
new file mode 100644
index 0000000..f3ef884
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_switchtimer.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="45"
+ height="23"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91pre2 r13516"
+ viewBox="0 0 45 23"
+ sodipodi:docname="ico_switchtimer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.6"
+ inkscape:cx="-13.27009"
+ inkscape:cy="16.082332"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1846"
+ inkscape:window-height="1058"
+ inkscape:window-x="66"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1029.3622)">
+ <rect
+ style="fill:#ff7f2a;fill-opacity:1;stroke:#ececec;stroke-width:0;stroke-miterlimit:5.69999981;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4148"
+ width="45"
+ height="23"
+ x="4.9999999e-006"
+ y="1029.3622"
+ ry="8.9285717" />
+ <g
+ style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text4150">
+ <path
+ d="m 9.2532783,1042.4468 q 0,0.531 -0.2502442,1.0498 -0.2441406,0.5188 -0.6896973,0.8789 -0.4882812,0.3906 -1.1413574,0.6103 -0.6469726,0.2198 -1.5625,0.2198 -0.982666,0 -1.7700195,-0.1831 -0.78125,-0.1831 -1.5930176,-0.5433 l 0,-1.5136 0.085449,0 q 0.6896973,0.5737 1.5930176,0.885 0.9033203,0.3113 1.6967774,0.3113 1.1230468,0 1.7456054,-0.4212 0.6286621,-0.4211 0.6286621,-1.123 0,-0.6043 -0.2990722,-0.8911 -0.2929688,-0.2869 -0.8972168,-0.4456 -0.4577637,-0.1221 -0.9948731,-0.2014 -0.5310058,-0.079 -1.1291504,-0.2014 -1.2084961,-0.2564 -1.7944336,-0.8728 -0.5798339,-0.6226 -0.5798339,-1.6175 0,-1.1413 0.9643554,-1.8676 0.9643555,-0.7325 2.4475098,-0.7325 0.9582519,0 1.7578125,0.1831 0.7995605,0.1832 1.4160156,0.4517 l 0,1.4282 -0.085449,0 q -0.5187988,-0.4394 -1.3671875,-0.7263 -0.8422852,-0.293 -1.7272949,-0.293 -0.970459,0 -1.5625,0.4029 -0.5859375,0.4028 -0.5859375,1.0376 0,0.5676 0.2929687,0.8911 0.2929688,0.3235 1.0314942,0.4944 0.390625,0.085 1.1108398,0.2075 0.7202149,0.1221 1.2207031,0.2502 1.0131836,0.2686 1.5258789,0.8118 0.5126954,0.5432 0.5126954,1.5198 z"
+ style=""
+ id="path4138" />
+ <path
+ d="m 19.678083,1038.2231 -1.776123,6.8177 -1.062012,0 -1.751709,-5.2552 -1.739502,5.2552 -1.055908,0 -1.794434,-6.8177 1.19629,0 1.25122,5.2796 1.702881,-5.2796 0.946045,0 1.745605,5.2796 1.184082,-5.2796 1.153565,0 z"
+ style=""
+ id="path4140" />
+ <path
+ d="m 22.565046,1037.0818 -1.293945,0 0,-1.1902 1.293945,0 0,1.1902 z m -0.07324,7.959 -1.147461,0 0,-6.8177 1.147461,0 0,6.8177 z"
+ style=""
+ id="path4142" />
+ <path
+ d="m 28.265729,1044.9797 q -0.323486,0.085 -0.708007,0.1404 -0.378418,0.055 -0.677491,0.055 -1.043701,0 -1.586914,-0.5615 -0.543213,-0.5615 -0.543213,-1.8005 l 0,-3.6255 -0.775146,0 0,-0.9644 0.775146,0 0,-1.9592 1.147461,0 0,1.9592 2.368164,0 0,0.9644 -2.368164,0 0,3.1067 q 0,0.5371 0.02441,0.8423 0.02441,0.299 0.170899,0.5615 0.134277,0.2441 0.366211,0.3601 0.238037,0.1099 0.720215,0.1099 0.280761,0 0.585937,-0.079 0.305176,-0.085 0.439453,-0.1404 l 0.06104,0 0,1.0315 z"
+ style=""
+ id="path4144" />
+ <path
+ d="m 34.698835,1044.6135 q -0.573731,0.2747 -1.092529,0.4273 -0.512696,0.1526 -1.09253,0.1526 -0.738525,0 -1.35498,-0.2137 -0.616455,-0.2197 -1.055908,-0.6591 -0.445557,-0.4395 -0.689698,-1.1109 -0.24414,-0.6714 -0.24414,-1.5686 0,-1.6723 0.915527,-2.6245 0.921631,-0.9521 2.429199,-0.9521 0.585938,0 1.147461,0.1647 0.567627,0.1648 1.037598,0.4029 l 0,1.2756 -0.06104,0 q -0.524903,-0.4089 -1.086426,-0.6286 -0.55542,-0.2198 -1.086426,-0.2198 -0.976562,0 -1.544189,0.6592 -0.561524,0.6531 -0.561524,1.9226 0,1.2329 0.549317,1.8982 0.55542,0.6592 1.556396,0.6592 0.347901,0 0.708008,-0.092 0.360107,-0.091 0.646973,-0.238 0.250244,-0.1282 0.46997,-0.2686 0.219727,-0.1464 0.347901,-0.2502 l 0.06104,0 0,1.2634 z"
+ style=""
+ id="path4146" />
+ <path
+ d="m 41.876569,1045.0408 -1.147461,0 0,-3.8819 q 0,-0.4699 -0.05493,-0.8789 -0.05493,-0.415 -0.201416,-0.6469 -0.152588,-0.2564 -0.439453,-0.3785 -0.286866,-0.1281 -0.744629,-0.1281 -0.469971,0 -0.982666,0.2319 -0.512696,0.2319 -0.982666,0.592 l 0,5.0904 -1.147461,0 0,-9.4971 1.147461,0 0,3.4363 q 0.537109,-0.4456 1.110839,-0.6958 0.573731,-0.2503 1.177979,-0.2503 1.104736,0 1.68457,0.6653 0.579834,0.6653 0.579834,1.9165 l 0,4.4251 z"
+ style=""
+ id="path4148" />
+ </g>
+ </g>
+</svg>
diff --git a/skins/nopacity/themes/default/icons/ico_yes.png b/skins/nopacity/themes/default/icons/ico_yes.png
new file mode 100644
index 0000000..2f1af98
--- /dev/null
+++ b/skins/nopacity/themes/default/icons/ico_yes.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_button.png b/skins/nopacity/themes/default/skinparts/tvguide_button.png
new file mode 100644
index 0000000..7a43e01
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_button.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_button_active.png b/skins/nopacity/themes/default/skinparts/tvguide_button_active.png
new file mode 100644
index 0000000..22d167e
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_button_active.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_bottom.png b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_bottom.png
new file mode 100644
index 0000000..c37ba42
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_bottom.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_head.png b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_head.png
new file mode 100644
index 0000000..75ee8a8
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_head.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_horizontal.png b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_horizontal.png
new file mode 100644
index 0000000..ead7606
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_left.png b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_left.png
new file mode 100644
index 0000000..30e1b45
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_left.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_right.png b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_right.png
new file mode 100644
index 0000000..d89657c
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_right.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_vertical.png b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_vertical.png
new file mode 100644
index 0000000..64134c7
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channelgroup_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channellogoback_horizontal.png b/skins/nopacity/themes/default/skinparts/tvguide_channellogoback_horizontal.png
new file mode 100644
index 0000000..2df7f52
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channellogoback_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_channellogoback_vertical.png b/skins/nopacity/themes/default/skinparts/tvguide_channellogoback_vertical.png
new file mode 100644
index 0000000..669beeb
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_channellogoback_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_clock.png b/skins/nopacity/themes/default/skinparts/tvguide_clock.png
new file mode 100644
index 0000000..3df1dae
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_clock.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_date_vertical.png b/skins/nopacity/themes/default/skinparts/tvguide_date_vertical.png
new file mode 100644
index 0000000..58a72e4
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_date_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_active_bottom.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_bottom.png
new file mode 100644
index 0000000..28fb443
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_bottom.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_active_head.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_head.png
new file mode 100644
index 0000000..a494d95
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_head.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_active_horizontal.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_horizontal.png
new file mode 100644
index 0000000..368309f
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_active_left.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_left.png
new file mode 100644
index 0000000..0548e21
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_left.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_active_right.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_right.png
new file mode 100644
index 0000000..2aee1d6
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_right.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_active_vertical.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_vertical.png
new file mode 100644
index 0000000..6aba9d1
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_active_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_bottom.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_bottom.png
new file mode 100644
index 0000000..e90e05e
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_bottom.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_head.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_head.png
new file mode 100644
index 0000000..4196cd8
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_head.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_horizontal.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_horizontal.png
new file mode 100644
index 0000000..6bccb3f
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_left.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_left.png
new file mode 100644
index 0000000..7b17046
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_left.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_right.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_right.png
new file mode 100644
index 0000000..17fe003
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_right.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_grid_vertical.png b/skins/nopacity/themes/default/skinparts/tvguide_grid_vertical.png
new file mode 100644
index 0000000..e7192ac
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_grid_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_header.png b/skins/nopacity/themes/default/skinparts/tvguide_header.png
new file mode 100644
index 0000000..24fd20c
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_header.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_timelinebright_horizontal.png b/skins/nopacity/themes/default/skinparts/tvguide_timelinebright_horizontal.png
new file mode 100644
index 0000000..9240b37
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_timelinebright_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_timelinebright_vertical.png b/skins/nopacity/themes/default/skinparts/tvguide_timelinebright_vertical.png
new file mode 100644
index 0000000..5466546
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_timelinebright_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_timelinedark_horizontal.png b/skins/nopacity/themes/default/skinparts/tvguide_timelinedark_horizontal.png
new file mode 100644
index 0000000..4364677
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_timelinedark_horizontal.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_timelinedark_vertical.png b/skins/nopacity/themes/default/skinparts/tvguide_timelinedark_vertical.png
new file mode 100644
index 0000000..dfa06c9
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_timelinedark_vertical.png
Binary files differ
diff --git a/skins/nopacity/themes/default/skinparts/tvguide_tvframe.png b/skins/nopacity/themes/default/skinparts/tvguide_tvframe.png
new file mode 100644
index 0000000..cdb800c
--- /dev/null
+++ b/skins/nopacity/themes/default/skinparts/tvguide_tvframe.png
Binary files differ
diff --git a/skins/nopacity/themes/default/theme.xml b/skins/nopacity/themes/default/theme.xml
index 82c075c..36af8e4 100644
--- a/skins/nopacity/themes/default/theme.xml
+++ b/skins/nopacity/themes/default/theme.xml
@@ -15,6 +15,7 @@
<color name="clrBorder">FF4C5C11</color>
<color name="clrGray">FF858585</color>
<color name="clrBackground">B012273F</color>
+ <color name="clrBackgroundOpaque">FF12273F</color>
<color name="clrTransBlack">99000000</color>
<color name="clrTransBlackDark">CC000000</color>
<color name="clrTransRed">99FF0000</color>
diff --git a/skins/nopacity/xmlfiles/plug-tvguideng-detail.xml b/skins/nopacity/xmlfiles/plug-tvguideng-detail.xml
new file mode 100644
index 0000000..2ad6b76
--- /dev/null
+++ b/skins/nopacity/xmlfiles/plug-tvguideng-detail.xml
@@ -0,0 +1,386 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
+
+<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="80%" scaletvy="0" scaletvwidth="20%" scaletvheight="20%">
+
+ <viewelement name="background">
+ <area x="0" y="0" width="100%" height="20%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_header" x="0" y="0" width="80%" height="100%"/>
+ <drawimage imagetype="skinpart" path="tvguide_tvframe" x="80%" y="0" width="20%" height="100%"/>
+ </area>
+ <area x="0" y="20%" width="100%" height="80%" layer="1">
+ <fill color="{clrBackground}" />
+ </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="97%" y="20%" width="2%" height="65%" layer="2">
+ <fill color="{clrBorder}" />
+ <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="{clrScrollbar}" />
+ </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 condition="{red1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </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="1%" width="75%" height="18%" layer="2">
+ <drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="15%" height="80%" valign="center" />
+ <drawtext name="title" x="{width(logo)} + 20" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{title}" />
+ <drawtext name="datetime" x="{width(logo)} + 20" y="{posy(title)} - {height(datetime)}" font="{vdrOsd}" fontsize="25%" color="{clrWhite}" text="{day} {date} {start} - {stop} ({duration} mins)" />
+ <drawtext name="shorttext" x="{width(logo)} + 20" y="{posy(title)} + {height(title)}" font="{vdrOsd}" fontsize="25%" color="{clrWhite}" text="{shorttext}" />
+ </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="1%" y="21%" width="95%" height="65%" layer="2" scrollheight="{areaheight}/4">
+ <drawtextbox condition="not{isseries}++not{ismovie}" x="0" y="10" width="96%" font="{vdrOsd}" fontsize="6%" color="{clrWhite}" text="{description}" />
+ <drawimage condition="{isseries}" name="seriesposter" imagetype="image" path="{seriesposter1path}" x="{areawidth}*0.75" y="10" width="{areawidth}*0.25" height="{areawidth} * 0.25 * {seriesposter1height} / {seriesposter1width}"/>
+ <drawimage condition="{ismovie}" name="movieposter" imagetype="image" path="{posterpath}" x="{areawidth}*0.75" y="10" width="{areawidth}*0.25" height="{areawidth} * 0.25 * {posterheight} / {posterwidth}" />
+ <drawtextbox condition="{isseries}" x="0" y="10" width="96%" float="topright" floatwidth="{width(seriesposter)} + 10" floatheight="{height(seriesposter)} + 20" font="{vdrOsd}" fontsize="6%" color="{clrWhite}" text="{description}" />
+ <drawtextbox condition="{ismovie}" x="0" y="10" width="96%" float="topright" floatwidth="{width(movieposter)} + 10" floatheight="{height(movieposter)} + 20" font="{vdrOsd}" fontsize="6%" color="{clrWhite}" text="{description}" />
+ </tab>
+ <!-- TAB RERUNS -->
+ <tab condition="{hasreruns}" name="{tr(reruns)}" x="1%" y="21%" width="95%" height="60%" layer="2" scrollheight="{areaheight}/4">
+ <drawtext align="center" y="0" name="title" font="{vdrOsd}" fontsize="10%" color="{clrWhite}" text="{tr(rerunsof)} '{title}'" />
+ <loop name="reruns" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="vertical">
+ <drawimage name="logo" condition="{reruns[channellogoexists]}" imagetype="channellogo" path="{reruns[channelid]}" x="0" width="10%" height="10%" />
+ <drawtext name="channelname" condition="not{reruns[channellogoexists]}" x="-5" font="{vdrOsd}" fontsize="10%" color="{clrWhite}" text="{reruns[channelname]}" />
+ <drawtext condition="{reruns[channellogoexists]}" x="{width(logo)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{vdrOsd}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />
+ <drawtext condition="not{reruns[channellogoexists]}" x="{width(channelname)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{vdrOsd}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />
+ </loop>
+ </tab>
+ <!-- TAB ACTORS -->
+ <tab condition="{isseries}||{ismovie}" name="{tr(actors)}" x="1%" y="21%" width="95%" height="60%" layer="2" scrollheight="{areaheight}/4">
+ <drawtext align="center" name="title" y="0" font="{vdrOsd}" fontsize="15%" color="{clrWhite}" text="{tr(actors)}" />
+ <loop name="actors" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="horizontal" columnwidth="{areawidth}/5" rowheight="{areawidth}/5*1.8" overflow="linewrap">
+ <drawimage name="thumb" imagetype="image" path="{actors[thumb]}" x="20" y="0" width="{columnwidth}-40" height="{columnwidth} * {actors[thumbheight]} / {actors[thumbwidth]} - 40 * {actors[thumbheight]} / {actors[thumbwidth]}"/>
+ <drawtext align="center" y="{height(thumb)} + 10" width="{columnwidth}" name="actorname" font="{vdrOsd}" fontsize="7%" color="{clrWhite}" text="{actors[name]}" />
+ <drawtext align="center" y="{height(thumb)} + 10 + {height(actorname)}" width="{columnwidth}" font="{vdrOsd}" fontsize="7%" color="{clrWhite}" text="{actors[role]}" />
+ </loop>
+ </tab>
+ <!-- TAB TVDBINFO -->
+ <tab condition="{isseries}" name="TvDBInfo" x="1%" y="21%" width="95%" height="60%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="banner" imagetype="image" path="{seriesbanner1path}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner1height} / {seriesbanner1width}"/>
+ <drawimage name="episodeimage" imagetype="image" path="{episodeimagepath}" x="{areawidth}*0.7" y="{height(banner)} + 20" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {episodeimageheight} / {episodeimagewidth}"/>
+ <drawimage name="seasonposter" imagetype="image" path="{seasonposterpath}" x="{areawidth}*0.7" y="{height(banner)} + {height(episodeimage)} + 30" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {seasonposterheight} / {seasonposterwidth}"/>
+ <drawtextbox x="0" y="{height(banner)} + 20" width="96%" float="topright" floatwidth="{width(seasonposter)} + 10" floatheight="{height(episodeimage)} + {height(seasonposter)} + 30" font="{vdrOsd}" fontsize="6%" color="{clrWhite}" text="{tr(episode)}: {episodetitle} ({tr(season)} {episodeseason}, {tr(episode)} {episodenumber}) &#10;&#10;{episodeoverview}|&#10;&#10;{tr(gueststars)}: {episodegueststars}||&#10;&#10;{tr(seriesfirstaired)}: {seriesfirstaired}||&#10;{tr(episodefirstaired)}: {episodefirstaired}||&#10;{tr(network)}: {seriesnetwork}||&#10;{tr(genre)}: {seriesgenre}||&#10;{tr(status)}: {seriesstatus}||&#10;{tr(rating)}: {seriesrating}||&#10;{tr(episoderating)}: {episoderating}&#10;|{seriesoverview}&#10;" />
+ </tab>
+ <!-- TAB SERIESGALERY -->
+ <tab condition="{isseries}" name="{tr(seriesgalery)}" x="1%" y="21%" width="95%" height="60%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="banner1" imagetype="image" path="{seriesbanner1path}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner1height} / {seriesbanner1width}"/>
+ <drawimage name="fanart1" imagetype="image" path="{seriesfanart1path}" align="center" y="{posy(banner1)} + {height(banner1)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart1height} / {seriesfanart1width}"/>
+ <drawimage name="banner2" imagetype="image" path="{seriesbanner2path}" align="center" y="{posy(fanart1)} + {height(fanart1)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner2height} / {seriesbanner2width}"/>
+ <drawimage name="fanart2" imagetype="image" path="{seriesfanart2path}" align="center" y="{posy(banner2)} + {height(banner2)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart2height} / {seriesfanart2width}"/>
+ <drawimage name="banner3" imagetype="image" path="{seriesbanner3path}" align="center" y="{posy(fanart2)} + {height(fanart2)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesbanner3height} / {seriesbanner3width}"/>
+ <drawimage name="fanart3" imagetype="image" path="{seriesfanart3path}" align="center" y="{posy(banner3)} + {height(banner3)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {seriesfanart3height} / {seriesfanart3width}"/>
+ <drawimage name="poster1" imagetype="image" path="{seriesposter1path}" align="center" y="{posy(fanart3)} + {height(fanart3)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter1height} / {seriesposter1width}"/>
+ <drawimage name="poster2" imagetype="image" path="{seriesposter2path}" align="center" y="{posy(poster1)} + {height(poster1)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter2height} / {seriesposter2width}"/>
+ <drawimage name="poster3" imagetype="image" path="{seriesposter3path}" align="center" y="{posy(poster2)} + {height(poster2)} + 20" width="{areawidth}*0.5" height="{areawidth} * 0.5 * {seriesposter3height} / {seriesposter3width}"/>
+ </tab>
+ <!-- TAB MOVIEDBINFO -->
+ <tab condition="{ismovie}" name="MovieDBInfo" x="1%" y="21%" width="95%" height="60%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="poster" imagetype="image" path="{posterpath}" x="70%" y="10" width="{areawidth}*0.3" height="{areawidth} * 0.3 * {posterheight} / {posterwidth}"/>
+ <drawtextbox x="0" y="10" width="96%" float="topright" floatwidth="{width(poster)} + 10" floatheight="{height(poster)} + 20" font="{vdrOsd}" fontsize="8%" color="{clrWhite}" text="{tr(originaltitle)}: {movieoriginalTitle}&#10;&#10;|{tr(genre)}: {moviegenres}&#10;&#10;||{movietagline}&#10;&#10;|{movieoverview}&#10;&#10;|{tr(budget)}: {moviebudget}&#10;||{tr(revenue)}: {movierevenue}&#10;&#10;||{tr(adult)}: {movieadult}&#10;||{tr(releasedate)}: {moviereleasedate}&#10;||{tr(runtime)}: {movieruntime} min&#10;||&#10;{tr(popularity)}: {moviepopularity}&#10;||&#10;{tr(voteaverage)}: {movievoteaverage}&#10;||&#10;{tr(homepage)}: {moviehomepage}|&#10;" />
+ </tab>
+ <!-- TAB MOVIEGALERY -->
+ <tab condition="{ismovie}" name="{tr(moviegalery)}" x="1%" y="21%" width="95%" height="60%" layer="2" scrollheight="{areaheight}/4">
+ <drawimage name="fanart" imagetype="image" path="{fanartpath}" align="center" y="10" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {fanartheight} / {fanartwidth}"/>
+ <drawimage name="poster" imagetype="image" path="{posterpath}" align="center" y="{height(fanart)} + 30" width="{areawidth}*0.6" height="{areawidth} * 0.6 * {posterheight} / {posterwidth}"/>
+ <drawimage condition="{movieiscollection}" name="collectionfanart" imagetype="image" path="{collectionfanartpath}" align="center" y="{posy(poster)} + {height(poster)} + 20" width="{areawidth}*0.9" height="{areawidth} * 0.9 * {collectionfanartheight} / {collectionfanartwidth}"/>
+ <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:
+ {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="1%" y="87%" width="98%" height="5%" layer="3">
+ <drawrectangle x="0" y="1" width="100%" height="1" color="{clrBorder}" />
+ <loop name="tabs" x="0" y="0" orientation="horizontal">
+ <drawrectangle condition="{tabs[current]}" x="0" y="1" width="{width(label)}" height="100%" color="{clrBorder}" />
+ <drawrectangle condition="not{tabs[current]}" x="0" y="1" width="{width(label)}" height="100%" color="{clrBorder}" />
+ <drawrectangle condition="not{tabs[current]}" x="2" y="2" width="{width(label)} - 4" height="{areaheight}-4" color="{clrTransparent}" />
+ <drawtext name="label" x="0" valign="center" font="{vdrOsd}" fontsize="95%" color="{clrWhite}" text=" {tabs[title]} " />
+ </loop>
+ </area>
+ </tablabels>
+
+</displayplugin>
diff --git a/skins/nopacity/xmlfiles/plug-tvguideng-recmenu.xml b/skins/nopacity/xmlfiles/plug-tvguideng-recmenu.xml
new file mode 100644
index 0000000..01bedda
--- /dev/null
+++ b/skins/nopacity/xmlfiles/plug-tvguideng-recmenu.xml
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
+
+<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="80%" scaletvy="0" scaletvwidth="20%" scaletvheight="20%">
+ <!-- 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="{clrBackgroundOpaque}" />
+ </area>
+ <area condition="{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 + {areawidth}*0.03" height="{menuheight}*{areaheight}/100" color="{clrBackgroundOpaque}"/>
+ </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="{clrScrollbar}" />
+ <drawrectangle x="{areawidth}/2 + {menuwidth}*{areawidth}/100/2 + 2" y="{posy}*{areaheight}/100 + 2" width="{areawidth}*0.02 - 4" height="{totalheight}*{areaheight}/100 - 4" color="{clrTransparent}" />
+ </area>
+ <area x="0" y="0" width="100%" height="100%" layer="6">
+ <drawrectangle x="{areawidth}/2 + {menuwidth}*{areawidth}/100/2 + 4" y="{posy}*{areaheight}/100 + {totalheight}*{areaheight}/100 * {offset} / 1000 + 4" width="{areawidth}*0.02 - 8" height="{totalheight}*{areaheight}/100 * {height} / 1000 - 8" color="{clrScrollbar}" />
+ </area>
+ </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">
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_button" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_button_active" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area condition="{info}" layer="5">
+ <drawtext condition="eq({lines}, 1)" align="center" valign="center" font="{vdrOsd}" fontsize="60%" color="{clrWhite}" text="{line1}" />
+
+ <drawtext condition="eq({lines}, 2)" align="center" y="5%" font="{vdrOsd}" fontsize="40%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 2)" align="center" y="52%" font="{vdrOsd}" fontsize="40%" color="{clrWhite}" text="{line2}" />
+
+ <drawtext condition="eq({lines}, 3)" align="center" y="0%" font="{vdrOsd}" fontsize="28%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 3)" align="center" y="33%" font="{vdrOsd}" fontsize="28%" color="{clrWhite}" text="{line2}" />
+ <drawtext condition="eq({lines}, 3)" align="center" y="66%" font="{vdrOsd}" fontsize="28%" color="{clrWhite}" text="{line3}" />
+
+ <drawtext condition="eq({lines}, 4)" align="center" y="0%" font="{vdrOsd}" fontsize="22%" color="{clrWhite}" text="{line1}" />
+ <drawtext condition="eq({lines}, 4)" align="center" y="25%" font="{vdrOsd}" fontsize="22%" color="{clrWhite}" text="{line2}" />
+ <drawtext condition="eq({lines}, 4)" align="center" y="50%" font="{vdrOsd}" fontsize="22%" color="{clrWhite}" text="{line3}" />
+ <drawtext condition="eq({lines}, 4)" align="center" y="75%" font="{vdrOsd}" fontsize="22%" color="{clrWhite}" text="{line4}" />
+ </area>
+ <!-- button
+ {button} true
+ {buttontext} text to display on button
+ -->
+ <area condition="{button}" layer="6">
+ <drawtext condition="not{current}" align="center" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{buttontext}" />
+ <drawtext condition="{current}" align="center" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" 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
+ -->
+ <area condition="{buttonyesno}" layer="5">
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_button" x="2%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_button" x="52%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++{yes}" imagetype="skinpart" path="tvguide_button_active" x="2%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++{yes}" imagetype="skinpart" path="tvguide_button" x="52%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++not{yes}" imagetype="skinpart" path="tvguide_button" x="2%" y="5%" width="46%" height="90%"/>
+ <drawimage condition="{current}++not{yes}" imagetype="skinpart" path="tvguide_button_active" x="52%" y="5%" width="46%" height="90%"/>
+ </area>
+ <area condition="{buttonyesno}" layer="6">
+ <drawtext condition="not{current}" name="yestext" x="{areawidth}/4 - {width(yestext)}/2" valign="center" font="{vdrOsd}" fontsize="70%" color="{clrFontMenuItem}" text="{textyes}" />
+ <drawtext condition="not{current}" name="notext" x="3*{areawidth}/4 - {width(notext)}/2" valign="center" font="{vdrOsd}" fontsize="70%" color="{clrFontMenuItem}" text="{textno}" />
+ <drawtext condition="{current}++{yes}" name="yestext" x="{areawidth}/4 - {width(yestext)}/2" valign="center" font="{vdrOsd}" fontsize="70%" color="{clrFontMenuItemSelected}" text="{textyes}" />
+ <drawtext condition="{current}++not{yes}" name="yestext" x="{areawidth}/4 - {width(yestext)}/2" valign="center" font="{vdrOsd}" fontsize="70%" color="{clrFontMenuItem}" text="{textyes}" />
+ <drawtext condition="{current}++not{yes}" name="notext" x="3*{areawidth}/4 - {width(notext)}/2" valign="center" font="{vdrOsd}" fontsize="70%" color="{clrFontMenuItemSelected}" text="{textno}" />
+ <drawtext condition="{current}++{yes}" name="notext" x="3*{areawidth}/4 - {width(notext)}/2" valign="center" font="{vdrOsd}" fontsize="70%" color="{clrFontMenuItem}" text="{textno}" />
+ </area> <!-- Int Selector
+ {intselector} true
+ {text} title of selector
+ {value} current value of selector, integer
+ -->
+ <area condition="{intselector}" layer="6">
+ <drawtext condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" text="{text}" />
+ <drawtext condition="not{current}" align="right" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{value} " />
+ <drawtext condition="{current}" align="right" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" 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 condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" 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 condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" 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 condition="not{current}" name="value" x="{areawidth} - {width(value)} - {areaheight}" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{value}" />
+ <drawtext condition="{current}" name="value" x="{areawidth} - {width(value)} - {areaheight}" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" 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
+ -->
+ <area condition="{textinput}" layer="6">
+ <drawtext condition="not{current}" x="1%" y="10%" font="{vdrOsd}" fontsize="40%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" y="10%" font="{vdrOsd}" fontsize="40%" color="{clrFontMenuItemSelected}" text="{text}" />
+ <drawrectangle condition="not{editmode}" x="1%" y="55%" width="98%" height="40%" color="{clrWhite}"/>
+ <drawrectangle condition="{editmode}" x="1%" y="55%" width="98%" height="40%" color="{clrRed}"/>
+ </area>
+ <area condition="{textinput}" layer="7">
+ <drawtext align="right" y="55%" font="{vdrOsd}" fontsize="40%" color="{clrBlack}" text="{value} " />
+ </area>
+ <!-- Time Selector
+ {timeselector} true
+ {text} title of selector
+ {value} current value of selector, hh:mm
+ -->
+ <area condition="{timeselector}" layer="6">
+ <drawtext condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" text="{text}" />
+ <drawtext condition="not{current}" align="right" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{value} " />
+ <drawtext condition="{current}" align="right" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" text="{value} " />
+ </area>
+ <!-- Day Selector
+ {dayselector} true
+ {text} title of selector
+ {value} current value of selector, dd.mm
+ -->
+ <area condition="{dayselector}" layer="6">
+ <drawtext condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" text="{text}" />
+ <drawtext condition="not{current}" align="right" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{value} " />
+ <drawtext condition="{current}" align="right" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" 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 condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" text="{text}" />
+ <drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="{areawidth}-{areaheight}" valign="center" width="{areaheight}*0.9" height="{areaheight}*0.9" />
+ <drawtext name="channelnumberlogo" condition="{channellogoexisis}" x="{areawidth}-{areaheight}-{width(channelnumberlogo)}-10" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrWhite}" text="{channelnumber}" />
+ <drawtext condition="not{channellogoexisis}++{channelnumber}" align="right" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrWhite}" text="{channelnumber} {channelname} " />
+ <drawtext condition="not{channelnumber}" align="right" valign="center" font="{vdrOsd}" 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
+ -->
+ <area condition="{weekdayselector}" layer="6">
+ <drawtext condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" text="{text}" />
+
+ <drawrectangle x="{areawidth} - {areaheight}*4" y="25%" width="{areaheight}*3.5" height="50%" color="{clrWhite}" />
+
+ <drawrectangle condition="not{day0set}" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray}" />
+ <drawrectangle condition="{day0set}" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlack}" />
+
+ <drawrectangle condition="not{day1set}" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray}" />
+ <drawrectangle condition="{day1set}" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlack}" />
+
+ <drawrectangle condition="not{day2set}" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray}" />
+ <drawrectangle condition="{day2set}" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlack}" />
+
+ <drawrectangle condition="not{day3set}" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray}" />
+ <drawrectangle condition="{day3set}" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlack}" />
+
+ <drawrectangle condition="not{day4set}" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray}" />
+ <drawrectangle condition="{day4set}" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlack}" />
+
+ <drawrectangle condition="not{day5set}" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray}" />
+ <drawrectangle condition="{day5set}" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlack}" />
+
+ <drawrectangle condition="not{day6set}" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrGray}" />
+ <drawrectangle condition="{day6set}" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrBlack}" />
+ </area>
+ <area condition="{weekdayselector}" layer="7">
+ <drawrectangle condition="{current}++eq({dayselected}, 0)" x="{areawidth} - {areaheight}*4.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransRed}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 1)" x="{areawidth} - {areaheight}*3.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransRed}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 2)" x="{areawidth} - {areaheight}*3.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransRed}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 3)" x="{areawidth} - {areaheight}*2.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransRed}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 4)" x="{areawidth} - {areaheight}*2.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransRed}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 5)" x="{areawidth} - {areaheight}*1.5 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransRed}" />
+ <drawrectangle condition="{current}++eq({dayselected}, 6)" x="{areawidth} - {areaheight}*1.0 + 2" y="{areaheight}*0.25+2" width="{areaheight}*0.5-4" height="{areaheight}*0.5-4" color="{clrTransRed}" />
+
+ <drawtext name="day0" x="{areawidth} - {areaheight}*4.0 + {areaheight}/4 - {width(day0)}/2" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{day0abbr}" />
+ <drawtext name="day1" x="{areawidth} - {areaheight}*3.5 + {areaheight}/4 - {width(day1)}/2" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{day1abbr}" />
+ <drawtext name="day2" x="{areawidth} - {areaheight}*3.0 + {areaheight}/4 - {width(day2)}/2" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{day2abbr}" />
+ <drawtext name="day3" x="{areawidth} - {areaheight}*2.5 + {areaheight}/4 - {width(day3)}/2" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{day3abbr}" />
+ <drawtext name="day4" x="{areawidth} - {areaheight}*2.0 + {areaheight}/4 - {width(day4)}/2" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{day4abbr}" />
+ <drawtext name="day5" x="{areawidth} - {areaheight}*1.5 + {areaheight}/4 - {width(day5)}/2" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{day5abbr}" />
+ <drawtext name="day6" x="{areawidth} - {areaheight}*1.0 + {areaheight}/4 - {width(day6)}/2" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{day6abbr}" />
+ </area>
+ <!-- Directory Selector
+ {directoryselector} true
+ {text} title of selector
+ {folder} current folder of selector, string
+ -->
+ <area condition="{directoryselector}" layer="6">
+ <drawtext condition="not{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItem}" text="{text}" />
+ <drawtext condition="{current}" x="1%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrFontMenuItemSelected}" 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="{vdrOsd}" 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
+ -->
+ <area condition="{timerconflictheader}" layer="5">
+ <drawtext name="title" x="{areawidth}*0.7*0.5 - {width(title)}/2" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrWhite}" text="{text}" />
+ <drawrectangle x="70%" y="0" width="30%" height="100%" color="{clrWhite}"/>
+ </area>
+ <area condition="{timerconflictheader}" layer="6">
+ <drawtext x="{areawidth}*0.7" y="0" font="{vdrOsd}" fontsize="50%" color="{clrBlack}" text="{conflictstart}" />
+ <drawtext align="right" y="0" font="{vdrOsd}" fontsize="50%" color="{clrBlack}" text="{conflictstop}" />
+ <drawtext name="olstart" x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100 - 70" y="50%" font="{vdrOsd}" fontsize="50%" color="{clrRed}" text="{overlapstart}" />
+ <drawtext x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100 + {overlapwidthpercent}*{areawidth}*0.3/100 + 5" y="50%" font="{vdrOsd}" fontsize="50%" color="{clrRed}" text="{overlapstop}" />
+ <drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="50%" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="50%" color="{clrTransRed}"/>
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timerconflict}" layer="5">
+ <drawimage condition="not{current}" imagetype="skinpart" path="menubutton" x="0" y="0" width="70%" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="menubuttonactive" x="0" y="0" width="70%" height="100%"/>
+ </area>
+ <area condition="{timerconflict}" layer="6">
+ <drawimage condition="{current}++{infoactive}" imagetype="icon" path="ico_info_active" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{infoactive}" imagetype="icon" path="ico_info_inactive" x="{areaheight}*0.05" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{deleteactive}" imagetype="icon" path="ico_delete_active" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{deleteactive}" imagetype="icon" path="ico_delete_inactive" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{editactive}" imagetype="icon" path="ico_edit_active" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{editactive}" imagetype="icon" path="ico_edit_inactive" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{searchactive}" imagetype="icon" path="ico_search_active" x="{areaheight}*1.7" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{searchactive}" imagetype="icon" path="ico_search_inactive" x="{areaheight}*1.7" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawtext x="{areaheight}*2.3" width="{areawidth}*0.7 - {areaheight}*2.4" y="0" font="{vdrOsd}" fontsize="40%" color="{clrWhite}" text="{timertitle}" />
+ <drawtext x="{areaheight}*2.3" y="40%" font="{vdrOsd}" fontsize="30%" color="{clrWhite}" text="{weekday} {date} {starttime} - {stoptime}" />
+ <drawtext x="{areaheight}*2.3" y="70%" font="{vdrOsd}" fontsize="30%" color="{clrWhite}" text="{channelname}, Transp. {transponder}" />
+ <drawrectangle x="70%" y="0" width="30%" height="100%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.7 + {timerstartpercent}*{areawidth}*0.3/100" y="30%" width="{timerwidthpercent}*{areawidth}*0.3/100" height="40%" color="{clrBlack}"/>
+ </area>
+ <area condition="{timerconflict}" layer="7">
+ <drawrectangle x="{areawidth}*0.7 + {overlapstartpercent}*{areawidth}*0.3/100" y="0" width="{overlapwidthpercent}*{areawidth}*0.3/100" height="100%" color="{clrTransRed}"/>
+ </area>
+ <!-- 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"/>
+ <drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="{areaheight}*0.8" valign="center" width="{areaheight}" height="{areaheight}" />
+ <drawtext condition="not{current}" x="{areaheight}*2.2" y="2" font="{vdrOsd}" fontsize="30%" color="{clrFontMenuItem}" text="{weekday} {date} {starttime} - {stoptime} {channelname}" />
+ <drawtext condition="not{current}" x="{areaheight}*2.2" y="30%" width="{areawidth} - 3*{areaheight}" font="{vdrOsd}" fontsize="45%" color="{clrFontMenuItem}" text="{title}" />
+ <drawtext condition="not{current}" x="{areaheight}*2.2" y="69%" width="{areawidth} - 3*{areaheight}" font="{vdrOsd}" fontsize="30%" color="{clrFontMenuItem}" text="{shorttext}" />
+ <drawtext condition="{current}" x="{areaheight}*2.2" y="2" font="{vdrOsd}" fontsize="30%" color="{clrFontMenuItemSelected}" text="{weekday} {date} {starttime} - {stoptime} {channelname}" />
+ <drawtext condition="{current}" x="{areaheight}*2.2" y="30%" width="{areawidth} - 3*{areaheight}" font="{vdrOsd}" fontsize="45%" color="{clrFontMenuItemSelected}" text="{title}" />
+ <drawtext condition="{current}" x="{areaheight}*2.2" y="69%" width="{areawidth} - 3*{areaheight}" font="{vdrOsd}" fontsize="30%" color="{clrFontMenuItemSelected}" text="{shorttext}" />
+ <drawimage condition="{current}++not{hastimer}" imagetype="icon" path="ico_record_active" x="{areawidth} - {areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <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 condition="not{current}" x="1%" y="0" font="{vdrOsd}" width="98%" fontsize="50%" color="{clrFontMenuItem}" text="{recname}" />
+ <drawtext condition="not{current}" x="55%" y="0" font="{vdrOsd}" width="98%" fontsize="35%" color="{clrFontMenuItem}" text="{recdate} {recstarttime} - {recduration} min, {channelname}" />
+ <drawtext condition="{current}" x="1%" y="0" font="{vdrOsd}" width="98%" fontsize="50%" color="{clrFontMenuItemSelected}" text="{recname}" />
+ <drawtext condition="{current}" x="55%" y="0" font="{vdrOsd}" width="98%" fontsize="35%" color="{clrFontMenuItemSelected}" 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"/>
+ <drawimage condition="{current}++{editactive}" imagetype="icon" path="ico_edit_active" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{editactive}" imagetype="icon" path="ico_edit_inactive" x="{areaheight}*0.6" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="{current}++{deleteactive}" imagetype="icon" path="ico_delete_active" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawimage condition="not{current}||not{deleteactive}" imagetype="icon" path="ico_delete_inactive" x="{areaheight}*1.15" valign="center" width="{areaheight}*0.5" height="{areaheight}*0.5"/>
+ <drawtext condition="not{current}" x="{areaheight}*1.8" width="{areawidth} - {areaheight}*2" y="5%" font="{vdrOsd}" fontsize="45%" color="{clrFontMenuItem}" text="{searchstring}" />
+ <drawtext condition="{current}" x="{areaheight}*1.8" width="{areawidth} - {areaheight}*2" y="5%" font="{vdrOsd}" fontsize="45%" color="{clrFontMenuItemSelected}" text="{searchstring}" />
+ <drawtext condition="{timeractive}" align="right" y="5%" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="active " />
+ <drawtext x="{areaheight}*1.8" y="55%" font="{vdrOsd}" 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
+ -->
+ <area condition="{timelineheader}" layer="5">
+ <drawtext align="center" y="1%" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="Timer for {date}" />
+ <drawrectangle x="{areawidth}*0.05" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.0875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.1625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.2" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.2375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.275" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.3125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.35" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.3875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.425" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.4625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.5" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.5375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.575" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.6125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.65" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.6875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.725" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.7625" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.8" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.8375" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ <drawrectangle x="{areawidth}*0.875" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrBlack}"/>
+ <drawrectangle x="{areawidth}*0.9125" y="80%" width="{areawidth}*0.0375" height="20%" color="{clrWhite}"/>
+ </area>
+ <area condition="{timelineheader}" layer="6">
+ <drawtext name="text0" x="{areawidth}*0.05 + {areawidth}*0.0375/2 - {width(text0)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="0"/>
+ <drawtext name="text1" x="{areawidth}*0.0875 + {areawidth}*0.0375/2 - {width(text1)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="1"/>
+ <drawtext name="text2" x="{areawidth}*0.125 + {areawidth}*0.0375/2 - {width(text2)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="2"/>
+ <drawtext name="text3" x="{areawidth}*0.1625 + {areawidth}*0.0375/2 - {width(text3)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="3"/>
+ <drawtext name="text4" x="{areawidth}*0.2 + {areawidth}*0.0375/2 - {width(text4)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="4"/>
+ <drawtext name="text5" x="{areawidth}*0.2375 + {areawidth}*0.0375/2 - {width(text5)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="5"/>
+ <drawtext name="text6" x="{areawidth}*0.275 + {areawidth}*0.0375/2 - {width(text6)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="6"/>
+ <drawtext name="text7" x="{areawidth}*0.3125 + {areawidth}*0.0375/2 - {width(text7)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="7"/>
+ <drawtext name="text8" x="{areawidth}*0.35 + {areawidth}*0.0375/2 - {width(text8)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="8"/>
+ <drawtext name="text9" x="{areawidth}*0.3875 + {areawidth}*0.0375/2 - {width(text9)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="9"/>
+ <drawtext name="text10" x="{areawidth}*0.425 + {areawidth}*0.0375/2 - {width(text10)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="10"/>
+ <drawtext name="text11" x="{areawidth}*0.4625 + {areawidth}*0.0375/2 - {width(text11)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="11"/>
+ <drawtext name="text12" x="{areawidth}*0.5 + {areawidth}*0.0375/2 - {width(text12)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="12"/>
+ <drawtext name="text13" x="{areawidth}*0.5375 + {areawidth}*0.0375/2 - {width(text13)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="13"/>
+ <drawtext name="text14" x="{areawidth}*0.575 + {areawidth}*0.0375/2 - {width(text14)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="14"/>
+ <drawtext name="text15" x="{areawidth}*0.6125 + {areawidth}*0.0375/2 - {width(text15)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="15"/>
+ <drawtext name="text16" x="{areawidth}*0.65 + {areawidth}*0.0375/2 - {width(text16)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="16"/>
+ <drawtext name="text17" x="{areawidth}*0.6875 + {areawidth}*0.0375/2 - {width(text17)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="17"/>
+ <drawtext name="text18" x="{areawidth}*0.725 + {areawidth}*0.0375/2 - {width(text18)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="18"/>
+ <drawtext name="text19" x="{areawidth}*0.7625 + {areawidth}*0.0375/2 - {width(text19)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="19"/>
+ <drawtext name="text20" x="{areawidth}*0.8 + {areawidth}*0.0375/2 - {width(text20)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="20"/>
+ <drawtext name="text21" x="{areawidth}*0.8375 + {areawidth}*0.0375/2 - {width(text21)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="21"/>
+ <drawtext name="text22" x="{areawidth}*0.875 + {areawidth}*0.0375/2 - {width(text22)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="22"/>
+ <drawtext name="text23" x="{areawidth}*0.9125 + {areawidth}*0.0375/2 - {width(text23)}/2" y="80%" font="{vdrOsd}" fontsize="20%" color="{clrBlack}" text="23"/>
+ </area>
+ <area condition="{timelineheader}++{timerset}" layer="6">
+ <drawimage condition="{channellogoexisis}" imagetype="channellogo" path="{channelid}" x="1%" y="30%" width="{areaheight}*0.5" height="{areaheight}*0.5" />
+ <drawtext condition="not{channellogoexisis}" x="1%" width="{areaheight}*0.7" y="40%" font="{vdrOsd}" fontsize="20%" color="{clrWhite}" text="{channelname}"/>
+ <drawtext x="{areaheight}*0.8" y="36%" font="{vdrOsd}" fontsize="25%" color="{clrWhite}" text="{eventstart} - {eventstop} (Rec. {timerstart} - {timerstop}), Transp. {channeltransponder}"/>
+ <drawtext x="{areaheight}*0.8" y="57%" width="{areawidth}-{areaheight}" font="{vdrOsd}" fontsize="25%" color="{clrWhite}" text="{eventtitle} - {eventshorttext}"/>
+ </area>
+ <!-- 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
+ -->
+ <area condition="{timelinetimer}" layer="5">
+ <drawrectangle condition="{current}" x="5%" y="0" width="90%" height="100%" color="{clrBorder}"/>
+ <drawrectangle condition="not{current}" x="5%" y="0" width="90%" height="100%" color="{clrGray}"/>
+ <drawrectangle x="5%" y="{areaheight}-1" width="90%" height="1" color="{clrBlack}"/>
+ </area>
+ <area condition="{timelinetimer}" layer="6">
+ <drawrectangle x="{areawidth}*0.05 + {timerstart}*{areawidth}*0.9/1000" y="25%" width="{timerwidth}*{areawidth}*0.9/1000" height="50%" color="{clrBlack}"/>
+ </area>
+ <!-- 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"/>
+ <drawtext condition="not{current}" x="{areaheight}" valign="center" font="{vdrOsd}" width="{areawidth} - {areaheight}" fontsize="80%" color="{clrFontMenuItem}" text="{favdesc}" />
+ <drawtext condition="{current}" x="{areaheight}" valign="center" font="{vdrOsd}" width="{areawidth} - {areaheight}" fontsize="80%" color="{clrFontMenuItemSelected}" text="{favdesc}" />
+ </area>
+ </grid>
+</displayplugin>
diff --git a/skins/nopacity/xmlfiles/plug-tvguideng-root.xml b/skins/nopacity/xmlfiles/plug-tvguideng-root.xml
new file mode 100644
index 0000000..b071037
--- /dev/null
+++ b/skins/nopacity/xmlfiles/plug-tvguideng-root.xml
@@ -0,0 +1,371 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE displayplugin SYSTEM "../../../dtd/displayplugin.dtd">
+
+<displayplugin x="0" y="0" width="100%" height="100%" fadetime="0" scaletvx="80%" scaletvy="0" scaletvwidth="20%" scaletvheight="20%">
+
+ <viewelement name="background_hor">
+ <area x="0" y="0" width="100%" height="20%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_header" x="0" y="0" width="80%" height="100%"/>
+ <drawimage imagetype="skinpart" path="tvguide_tvframe" x="80%" y="0" width="20%" height="100%"/>
+ </area>
+ <area x="72%" y="1%" width="7%" height="5%" layer="2">
+ <drawimage imagetype="skinpart" path="tvguide_clock" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="0" y="20%" width="15%" height="5%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_left" x="0" y="0" width="12" height="100%"/>
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_vertical" x="12" y="0" width="{areawidth}-24" height="100%"/>
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_right" x="{areawidth}-12" y="0" width="12" height="100%"/>
+ </area>
+ <area x="0" y="92%" width="100%" height="8%" layer="1">
+ <fill color="{clrBackground}" />
+ </area>
+ </viewelement>
+
+ <viewelement name="background_ver">
+ <area x="0" y="0" width="100%" height="20%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_header" x="0" y="0" width="80%" height="100%"/>
+ <drawimage imagetype="skinpart" path="tvguide_tvframe" x="80%" y="0" width="20%" height="100%"/>
+ </area>
+ <area x="72%" y="1%" width="7%" height="5%" layer="2">
+ <drawimage imagetype="skinpart" path="tvguide_clock" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="0" y="20%" width="8%" height="15%" layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_date_vertical" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area x="0" y="90%" width="100%" height="10%" layer="1">
+ <fill color="{clrBackground}" />
+ </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">
+ <areascroll condition="not{isdummy}++not{hasposter}" orientation="vertical" mode="forthandback" delay="1000" scrollspeed="medium" x="1%" y="1%" width="71%" height="18%" layer="2">
+ <drawtext x="0" y="0" font="{vdrOsd}" width="100%" fontsize="20%" color="{clrWhite}" text="{day} {daynumeric}.{month} {start} - {stop}" />
+ <drawtext x="0" y="20%" font="{vdrOsd}" width="100%" fontsize="25%" color="{clrWhite}" text="{title}" />
+ <drawtextbox name="shorttext" x="0" y="45%" width="100%" font="{vdrOsd}" fontsize="15%" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox x="0" y="{posy(shorttext)} + {height(shorttext)}" width="100%" font="{vdrOsd}" fontsize="15%" color="{clrWhite}" text="{description}" />
+ </areascroll>
+ <area condition="not{isdummy}++{hasposter}" x="1%" y="1%" width="{areaheight}*0.18*{posterwidth}/{posterheight}" height="18%" layer="2">
+ <drawimage imagetype="image" path="{posterpath}" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <areascroll condition="not{isdummy}++{hasposter}" orientation="vertical" mode="forthandback" delay="1000" scrollspeed="medium" x="12%" y="1%" width="60%" height="18%" layer="2">
+ <drawtext x="0" y="0" font="{vdrOsd}" width="100%" fontsize="20%" color="{clrWhite}" text="{day} {daynumeric}.{month} {start} - {stop}" />
+ <drawtext x="0" y="20%" font="{vdrOsd}" width="100%" fontsize="25%" color="{clrWhite}" text="{title}" />
+ <drawtextbox name="shorttext" x="0" y="45%" width="100%" font="{vdrOsd}" fontsize="15%" color="{clrWhite}" text="{shorttext}" />
+ <drawtextbox x="0" y="{posy(shorttext)} + {height(shorttext)}" width="100%" font="{vdrOsd}" fontsize="15%" color="{clrWhite}" text="{description}" />
+ </areascroll>
+ <area condition="{isdummy}" x="1%" y="1%" width="58%" height="18%" layer="2">
+ <drawtext x="0" y="20%" font="{vdrOsd}" width="100%" fontsize="35%" color="{clrWhite}" text="{title}" />
+ </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">
+ <area condition="{red1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue1}" x="0" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue2}" x="25%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue3}" x="50%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </area>
+
+ <area condition="{red4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonred" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{red}" />
+ </area>
+ <area condition="{green4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttongreen" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{green}" />
+ </area>
+ <area condition="{yellow4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonyellow" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{yellow}" />
+ </area>
+ <area condition="{blue4}" x="75%" y="90%" width="25%" height="10%" layer="2">
+ <drawimage imagetype="skinpart" path="buttonblue" align="center" valign="center" width="90%" height="40%"/>
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{blue}" />
+ </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">
+ <area x="72%" y="1%" width="7%" height="5%" layer="3">
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="75%" color="{clrWhite}" text="{time}" />
+ </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="2">
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrWhite}" text="{weekday} {date}" />
+ </area>
+ </viewelement>
+
+ <viewelement name="datetimeline_ver">
+ <area x="0" y="20%" width="8%" height="15%" layer="1">
+ <drawtext align="center" y="10%" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{weekday}" />
+ <drawtext align="center" y="50%" font="{vdrOsd}" fontsize="35%" color="{clrWhite}" text="{date}" />
+ </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="25%" width="85%" height="68%" layer="3">
+ <drawrectangle x="{percenttotal}*{areawidth}/1000" y="0" width="1" height="100%" color="{clrRed}" />
+ </area>
+ </viewelement>
+
+ <viewelement name="timeindicator_ver">
+ <area x="0" y="35%" width="100%" height="57%" layer="3">
+ <drawrectangle x="0" y="{percenttotal}*{areaheight}/1000" width="100%" height="1" color="{clrRed}" />
+ </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">
+ <drawimage condition="{fullhour}" imagetype="skinpart" path="tvguide_timelinebright_horizontal" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{fullhour}" imagetype="skinpart" path="tvguide_timelinedark_horizontal" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtext condition="{fullhour}" x="5%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrBlack}" text="{timestring}" />
+ <drawtext condition="not{fullhour}" x="5%" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrWhite}" text="{timestring}" />
+ </area>
+ </grid>
+
+ <grid name="timeline_ver" x="0" y="35%" width="8%" height="57%">
+ <area layer="1">
+ <drawimage condition="{fullhour}" imagetype="skinpart" path="tvguide_timelinebright_vertical" x="0" y="0" width="100%" height="100%"/>
+ <drawimage condition="not{fullhour}" imagetype="skinpart" path="tvguide_timelinedark_vertical" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtext condition="{fullhour}" align="center" y="5%" font="{vdrOsd}" fontsize="40%" color="{clrBlack}" text="{timestring}" />
+ <drawtext condition="not{fullhour}" align="center" y="5%" font="{vdrOsd}" fontsize="40%" color="{clrWhite}" text="{timestring}" />
+ </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="68%">
+ <area layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_channellogoback_horizontal" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawimage condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" align="center" valign="center" width="90%" height="90%" />
+ <drawtext condition="not{channellogoexists}" align="center" valign="center" width="98%" font="{vdrOsd}" fontsize="40%" color="{clrWhite}" text="{name}" />
+ </area>
+ </grid>
+
+ <grid name="channels_ver" x="8%" y="25%" width="92%" height="10%">
+ <area layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_channellogoback_vertical" x="0" y="0" width="100%" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawimage condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" align="center" valign="center" width="80%" height="80%" />
+ <drawtext condition="not{channellogoexists}" align="center" valign="center" width="98%" font="{light}" fontsize="40%" color="{clrWhite}" text="{name}" />
+ </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="68%">
+ <area layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_head" x="0" y="0" width="100%" height="12"/>
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_horizontal" x="0" y="12" width="100%" height="{areaheight}-24"/>
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_bottom" x="0" y="{areaheight}-12" width="100%" height="12"/>
+ </area>
+ <area layer="2">
+ <drawtextvertical align="center" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{group}" />
+ </area>
+ </grid>
+
+ <grid name="channelgroups_ver" x="8%" y="20%" width="92%" height="5%">
+ <area layer="1">
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_left" x="0" y="0" width="12" height="100%"/>
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_vertical" x="12" y="0" width="{areawidth}-24" height="100%"/>
+ <drawimage imagetype="skinpart" path="tvguide_channelgroup_right" x="{areawidth}-12" y="0" width="12" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtext align="center" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrWhite}" text="{group}" />
+ </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="68%">
+ <area layer="1">
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_grid_left" x="0" y="0" width="13" height="100%"/>
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_grid_horizontal" x="13" y="0" width="{areawidth}-26" height="100%"/>
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_grid_right" x="{areawidth}-13" y="0" width="13" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_left" x="0" y="0" width="13" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_horizontal" x="13" y="0" width="{areawidth}-26" height="100%"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_right" x="{areawidth}-13" y="0" width="13" height="100%"/>
+ </area>
+ <area layer="2">
+ <drawtext condition="not{dummy}++{current}" x="1%" y="2%" font="{vdrOsd}" fontsize="45%" color="{clrFontMenuItemSelected}" text="{start} - {stop}" />
+ <drawtext condition="not{dummy}++{current}" x="1%" y="50%" width="98%" font="{vdrOsd}" fontsize="50%" color="{clrFontMenuItemSelected}" text="{title}" />
+ <drawtext condition="not{dummy}++not{current}" x="1%" y="2%" font="{vdrOsd}" fontsize="45%" color="{clrFontMenuItem}" text="{start} - {stop}" />
+ <drawtext condition="not{dummy}++not{current}" x="1%" y="50%" width="98%" font="{vdrOsd}" fontsize="50%" color="{clrFontMenuItem}" text="{title}" />
+ <drawtext condition="{dummy}++{current}" x="1%" valign="center" width="98%" font="{vdrOsd}" fontsize="50%" color="{clrFontMenuItemSelected}" text="{title}" />
+ <drawtext condition="{dummy}++not{current}" x="1%" valign="center" width="98%" font="{vdrOsd}" fontsize="50%" color="{clrFontMenuItem}" text="{title}" />
+ <drawimage condition="{timer}" imagetype="icon" path="ico_rec_on" x="{areawidth} - {areaheight}*0.42" y="58%" width="{areaheight}*0.4" height="{areaheight}*0.4"/>
+ <drawimage condition="{switchtimer}++not{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.42" y="58%" width="{areaheight}*0.4" height="{areaheight}*0.4"/>
+ <drawimage condition="{switchtimer}++{timer}" imagetype="icon" path="ico_switchtimer" x="{areawidth} - {areaheight}*0.84" y="58%" width="{areaheight}*0.4" height="{areaheight}*0.4"/>
+ </area>
+ </grid>
+
+ <grid name="schedules_ver" x="8%" y="35%" width="92%" height="57%">
+ <area layer="1">
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_grid_head" x="0" y="0" width="100%" height="12"/>
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_grid_vertical" x="0" y="12" width="100%" height="{areaheight}-24"/>
+ <drawimage condition="not{current}" imagetype="skinpart" path="tvguide_grid_bottom" x="0" y="{areaheight}-12" width="100%" height="12"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_head" x="0" y="0" width="100%" height="12"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_vertical" x="0" y="12" width="100%" height="{areaheight}-24"/>
+ <drawimage condition="{current}" imagetype="skinpart" path="tvguide_grid_active_bottom" x="0" y="{areaheight}-12" width="100%" height="12"/>
+ </area>
+ <area layer="2">
+ <drawtext condition="not{dummy}++{current}" x="2%" y="0" width="96%" font="{vdrOsd}" fontsize="{areawidth}*0.16" color="{clrFontMenuItemSelected}" text="{start} - {stop}" />
+ <drawtext condition="not{dummy}++not{current}" x="2%" y="0" width="96%" font="{vdrOsd}" fontsize="{areawidth}*0.16" color="{clrFontMenuItem}" text="{start} - {stop}" />
+ <drawtextbox name="title" condition="not{dummy}++{current}" x="2%" y="{areawidth}*0.16" width="96%" font="{vdrOsd}" fontsize="{areawidth}*0.15" color="{clrFontMenuItemSelected}" text="{title}" />
+ <drawtextbox name="title" condition="not{dummy}++not{current}" x="2%" y="{areawidth}*0.16" width="96%" font="{vdrOsd}" fontsize="{areawidth}*0.15" color="{clrFontMenuItem}" text="{title}" />
+ <drawtextbox condition="not{dummy}++{current}" x="2%" y="{posy(title)} + {height(title)} - {areawidth}*0.1" width="96%" height="{areaheight}*1.1 - {posy(title)} - {height(title)}" font="{vdrOsd}" fontsize="{areawidth}*0.12" color="{clrFontMenuItemSelected}" text="{shorttext}" />
+ <drawtextbox condition="not{dummy}++not{current}" x="2%" y="{posy(title)} + {height(title)} - {areawidth}*0.1" width="96%" height="{areaheight}*1.1 - {posy(title)} - {height(title)}" font="{vdrOsd}" fontsize="{areawidth}*0.12" color="{clrFontMenuItem}" text="{shorttext}" />
+ <drawtextbox condition="{dummy}++{current}" x="2%" y="5%" width="96%" font="{vdrOsd}" fontsize="{areawidth}*0.2" color="{clrFontMenuItemSelected}" text="{title}" />
+ <drawtextbox condition="{dummy}++not{current}" x="2%" y="5%" width="96%" font="{vdrOsd}" fontsize="{areawidth}*0.2" color="{clrFontMenuItem}" text="{title}" />
+ <drawimage condition="{timer}" imagetype="icon" path="ico_rec_on" x="82%" y="{areaheight}-{areawidth}*0.18" width="15%" height="{areawidth}*0.15"/>
+ <drawimage condition="{switchtimer}++not{timer}" imagetype="icon" path="ico_switchtimer" x="82%" y="{areaheight}-{areawidth}*0.18" width="15%" height="{areawidth}*0.15"/>
+ <drawimage condition="{switchtimer}++{timer}" imagetype="icon" path="ico_switchtimer" x="65%" y="{areaheight}-{areawidth}*0.18" width="15%" height="{areawidth}*0.15"/>
+ </area>
+ </grid>
+
+ <!-- Tokens available in channeljump
+ {channel} current user input for channel jump
+ -->
+ <viewelement name="channeljump">
+ </viewelement>
+
+</displayplugin>
diff --git a/views/displaymessageview.c b/views/displaymessageview.c
index c1ffe47..b51802b 100644
--- a/views/displaymessageview.c
+++ b/views/displaymessageview.c
@@ -18,6 +18,9 @@ bool cDisplayMessageView::createOsd(void) {
cOsd::OsdTop() + osdSize.Y(),
osdSize.Width(),
osdSize.Height());
+ if (!ok) {
+ DeleteOsdOnExit(false);
+ }
return ok;
}
diff --git a/views/displaypluginview.c b/views/displaypluginview.c
index 89ff94c..f3471cb 100644
--- a/views/displaypluginview.c
+++ b/views/displaypluginview.c
@@ -1,17 +1,26 @@
#define __STL_CONFIG_H
#include "displaypluginview.h"
-cDisplayPluginView::cDisplayPluginView(cTemplateView *tmplView) : cView(tmplView) {
+cDisplayPluginView::cDisplayPluginView(cTemplateView *tmplView, bool isRootView) : cView(tmplView) {
+ init = true;
+ tabInit = true;
+ tabScrolled = true;
+ hidden = false;
intTokens = NULL;
stringTokens = NULL;
loopTokens = NULL;
- DeleteOsdOnExit();
+ currentTmplTab = NULL;
+ tabView = NULL;
+ if (isRootView)
+ DeleteOsdOnExit();
SetFadeTime(tmplView->GetNumericParameter(ptFadeTime));
}
cDisplayPluginView::~cDisplayPluginView() {
CancelSave();
FadeOut();
+ if (tabView)
+ delete tabView;
}
bool cDisplayPluginView::createOsd(void) {
@@ -23,10 +32,49 @@ bool cDisplayPluginView::createOsd(void) {
return ok;
}
+void cDisplayPluginView::Deactivate(bool hide) {
+ Stop();
+ if (!hide)
+ return;
+ HidePixmaps();
+ for (map< int, cViewGrid* >::iterator it = viewGrids.begin(); it != viewGrids.end(); it++) {
+ cViewGrid *viewGrid = it->second;
+ viewGrid->Hide();
+ }
+ hidden = true;
+}
+
+void cDisplayPluginView::Activate(void) {
+ if (tvScaled) {
+ cDevice::PrimaryDevice()->ScaleVideo(scalingWindow);
+ }
+ if (hidden) {
+ ShowPixmaps();
+ for (map< int, cViewGrid* >::iterator it = viewGrids.begin(); it != viewGrids.end(); it++) {
+ cViewGrid *viewGrid = it->second;
+ viewGrid->Show();
+ }
+ }
+ Start();
+}
+
+void cDisplayPluginView::CleanViewElement(int id) {
+ if (ViewElementScrolls((eViewElement)id)) {
+ currentlyScrolling = false;
+ if (Running())
+ Stop();
+ DestroyViewElement((eViewElement)id);
+ } else {
+ ClearViewElement((eViewElement)id);
+ }
+}
+
void cDisplayPluginView::DisplayViewElement(int id) {
if (!intTokens || !stringTokens || !loopTokens)
return;
DrawViewElement((eViewElement)id, stringTokens, intTokens, loopTokens);
+ if (!init && ViewElementScrolls((eViewElement)id))
+ Start();
}
void cDisplayPluginView::InitGrids(int viewGridID) {
@@ -75,9 +123,162 @@ void cDisplayPluginView::ClearGrids(int viewGridID) {
(hit->second)->Clear();
}
+void cDisplayPluginView::SetTabIntTokens(map<string,int> *intTokens) {
+ tabIntTokens = *intTokens;
+}
+
+void cDisplayPluginView::SetTabStringTokens(map<string,string> *stringTokens) {
+ tabStringTokens = *stringTokens;
+}
+
+void cDisplayPluginView::SetTabLoopTokens(map<string,vector<map<string,string> > > *loopTokens) {
+ tabLoopTokens = *loopTokens;
+}
+
+void cDisplayPluginView::SetTabs(void) {
+ tmplView->InitViewTabIterator();
+ cTemplateViewTab *tmplTab = NULL;
+ while(tmplTab = tmplView->GetNextViewTab()) {
+ tmplTab->ParseDynamicParameters(&tabIntTokens, true);
+ tmplTab->ClearDynamicFunctionParameters();
+ tmplTab->ParseDynamicFunctionParameters(&tabStringTokens, &tabIntTokens);
+ if (tmplTab->DoExecute()) {
+ activeTabs.push_back(tmplTab);
+ }
+ }
+ atIt = activeTabs.begin();
+}
+
+void cDisplayPluginView::TabLeft(void) {
+ if (activeTabs.size() > 1) {
+ currentTmplTab = GetPrevTab();
+ delete tabView;
+ tabView = NULL;
+ tabScrolled = true;
+ } else {
+ tabScrolled = tabView->KeyLeft();
+ }
+}
+
+void cDisplayPluginView::TabRight(void) {
+ if (activeTabs.size() > 1) {
+ currentTmplTab = GetNextTab();
+ delete tabView;
+ tabView = NULL;
+ tabScrolled = true;
+ } else {
+ tabScrolled = tabView->KeyRight();
+ }
+}
+
+void cDisplayPluginView::TabUp(void) {
+ tabScrolled = tabView->KeyUp();
+}
+
+void cDisplayPluginView::TabDown(void) {
+ tabScrolled = tabView->KeyDown();
+}
+
+void cDisplayPluginView::DisplayTab(void) {
+ if (tabInit) {
+ currentTmplTab = *atIt;
+ tabInit = false;
+ }
+ if (!tabView) {
+ tabView = new cDisplayMenuTabView(currentTmplTab);
+ tabView->SetTokens(&tabIntTokens, &tabStringTokens, &tabLoopTokens);
+ tabView->CreateTab();
+ tabView->Start();
+ DrawTabLabels();
+ }
+ if (tabScrolled) {
+ DrawScrollbar();
+ }
+}
+
+cTemplateViewTab *cDisplayPluginView::GetPrevTab(void) {
+ if (atIt == activeTabs.begin()) {
+ atIt = activeTabs.end();
+ }
+ atIt--;
+ return *atIt;
+}
+
+cTemplateViewTab *cDisplayPluginView::GetNextTab(void) {
+ atIt++;
+ if (atIt == activeTabs.end()) {
+ atIt = activeTabs.begin();
+ }
+ return *atIt;
+}
+
+void cDisplayPluginView::DrawScrollbar(void) {
+ map < string, string > scrollbarStringTokens;
+ map < string, int > scrollbarIntTokens;
+
+ int barTop = 0;
+ int barHeight = 0;
+ tabView->GetScrollbarPosition(barTop, barHeight);
+
+ scrollbarIntTokens.insert(pair<string,int>("height", barHeight));
+ scrollbarIntTokens.insert(pair<string,int>("offset", barTop));
+ ClearViewElement((eViewElement)pveScrollbar);
+ DrawViewElement((eViewElement)pveScrollbar, &scrollbarStringTokens, &scrollbarIntTokens);
+}
+
+void cDisplayPluginView::DrawTabLabels(void) {
+ if (!ViewElementImplemented((eViewElement)pveTablabels)) {
+ return;
+ }
+ map < string, string > labelStringTokens;
+ map < string, int > labelIntTokens;
+ map < string, vector< map< string, string > > > labelLoopTokens;
+
+ string labelPrev = "";
+ string labelPrevTemp = "";
+ string labelCurrent = "";
+ string labelNext = "";
+ bool wasCurrent = false;
+ vector< map< string, string > > tabLabels;
+ for (list<cTemplateViewTab*>::iterator it = activeTabs.begin(); it != activeTabs.end(); it++) {
+ cTemplateViewTab *tab = *it;
+ map< string, string > tabLabel;
+ tabLabel.insert(pair< string, string >("tabs[title]", tab->GetName()));
+ if (wasCurrent) {
+ labelNext = tab->GetName();
+ }
+ if (tab == currentTmplTab) {
+ wasCurrent = true;
+ labelCurrent = tab->GetName();
+ labelPrev = labelPrevTemp;
+ tabLabel.insert(pair< string, string >("tabs[current]", "1"));
+ } else {
+ wasCurrent = false;
+ tabLabel.insert(pair< string, string >("tabs[current]", "0"));
+ }
+ labelPrevTemp = tab->GetName();
+ tabLabels.push_back(tabLabel);
+ }
+ if (labelNext.size() == 0 && activeTabs.size() > 0) {
+ cTemplateViewTab *firstTab = activeTabs.front();
+ labelNext = firstTab->GetName();
+ }
+ if (labelPrev.size() == 0 && activeTabs.size() > 0) {
+ cTemplateViewTab *lastTab = activeTabs.back();
+ labelPrev = lastTab->GetName();
+ }
+ labelStringTokens.insert(pair< string, string >("currenttab", labelCurrent));
+ labelStringTokens.insert(pair< string, string >("nexttab", labelNext));
+ labelStringTokens.insert(pair< string, string >("prevtab", labelPrev));
+ labelLoopTokens.insert(pair< string, vector< map< string, string > > >("tabs", tabLabels));
+
+ ClearViewElement((eViewElement)pveTablabels);
+ DrawViewElement((eViewElement)pveTablabels, &labelStringTokens, &labelIntTokens, &labelLoopTokens);
+}
+
void cDisplayPluginView::Action(void) {
SetInitFinished();
FadeIn();
DoFlush();
cView::Action();
-}
+} \ No newline at end of file
diff --git a/views/displaypluginview.h b/views/displaypluginview.h
index b170116..b3307a6 100644
--- a/views/displaypluginview.h
+++ b/views/displaypluginview.h
@@ -1,25 +1,45 @@
#ifndef __DISPLAYPLUGINVIEW_H
#define __DISPLAYPLUGINVIEW_H
+#include <list>
#include <vdr/thread.h>
#include "../libtemplate/template.h"
#include "view.h"
#include "viewgrid.h"
+#include "displaymenutabview.h"
class cDisplayPluginView : public cView {
private:
+ bool init;
+ bool tabInit;
+ bool tabScrolled;
+ bool hidden;
map<string,int> *intTokens;
map<string,string> *stringTokens;
map<string,vector<map<string,string> > > *loopTokens;
map< int, cViewGrid* > viewGrids;
+ map<string,int> tabIntTokens;
+ map<string,string> tabStringTokens;
+ map<string,vector<map<string,string> > > tabLoopTokens;
+ cTemplateViewTab *currentTmplTab;
+ list<cTemplateViewTab*> activeTabs;
+ list<cTemplateViewTab*>::iterator atIt;
+ cDisplayMenuTabView *tabView;
+ cTemplateViewTab *GetPrevTab(void);
+ cTemplateViewTab *GetNextTab(void);
+ void DrawScrollbar(void);
+ void DrawTabLabels(void);
virtual void Action(void);
public:
- cDisplayPluginView(cTemplateView *tmplView);
+ cDisplayPluginView(cTemplateView *tmplView, bool isRootView);
virtual ~cDisplayPluginView();
bool createOsd(void);
+ void Deactivate(bool hide);
+ void Activate(void);
void SetIntTokens(map<string,int> *intTokens) { this->intTokens = intTokens; };
void SetStringTokens(map<string,string> *stringTokens) { this->stringTokens = stringTokens; };
void SetLoopTokens(map<string,vector<map<string,string> > > *loopTokens) { this->loopTokens = loopTokens; };
+ void CleanViewElement(int id);
void DisplayViewElement(int id);
void InitGrids(int viewGridID);
void SetGrid(int viewGridID, long gridID, double x, double y, double width, double height, map<string,int> *intTokens, map<string,string> *stringTokens);
@@ -27,7 +47,16 @@ public:
void DeleteGrid(int viewGridID, long gridID);
void DisplayGrids(int viewGridID);
void ClearGrids(int viewGridID);
- void DoStart(void) { Start(); };
+ void SetTabIntTokens(map<string,int> *intTokens);
+ void SetTabStringTokens(map<string,string> *stringTokens);
+ void SetTabLoopTokens(map<string,vector<map<string,string> > > *loopTokens);
+ void SetTabs(void);
+ void TabLeft(void);
+ void TabRight(void);
+ void TabUp(void);
+ void TabDown(void);
+ void DisplayTab(void);
+ void DoStart(void) { init = false; Start(); };
void Flush(void) { DoFlush(); };
};
#endif //__DISPLAYPLUGINVIEW_H
diff --git a/views/view.c b/views/view.c
index 1571d2e..9e5a53a 100644
--- a/views/view.c
+++ b/views/view.c
@@ -16,7 +16,7 @@ cView::cView(cTemplateView *tmplView) : cPixmapContainer(tmplView->GetNumPixmaps
Init();
}
-cView::cView(cTemplateViewElement *tmplItem) : cPixmapContainer(tmplItem->GetNumPixmaps()) {
+cView::cView(cTemplateViewElement *tmplItem) : cPixmapContainer(tmplItem ? tmplItem->GetNumPixmaps() : 0) {
this->tmplItem = tmplItem;
tmplView = NULL;
tmplTab = NULL;
@@ -164,6 +164,23 @@ void cView::ClearViewElement(eViewElement ve) {
}
}
+void cView::DestroyViewElement(eViewElement ve) {
+ if (!tmplView)
+ return;
+ cTemplateViewElement *viewElement = tmplView->GetViewElement(ve);
+ if (!viewElement)
+ return;
+ int pixCurrent = viewElement->GetPixOffset();
+ if (pixCurrent < 0)
+ return;
+ cTemplatePixmap *pix = NULL;
+ viewElement->InitIterator();
+ while(pix = viewElement->GetNextPixmap()) {
+ DestroyPixmap(pixCurrent);
+ pixCurrent++;
+ }
+}
+
void cView::ActivateScrolling(void) {
if (veScroll == veUndefined)
return;
@@ -192,6 +209,22 @@ bool cView::ViewElementImplemented(eViewElement ve) {
return tmplView->GetNumPixmapsViewElement(ve);
}
+bool cView::ViewElementScrolls(eViewElement ve) {
+ if (scrollingPix < 0)
+ return false;
+ if (!tmplView)
+ return false;
+ cTemplateViewElement *viewElement = tmplView->GetViewElement(ve);
+ if (!viewElement)
+ return false;
+ int pixStart = viewElement->GetPixOffset();
+ int numPixmaps = viewElement->GetNumPixmaps();
+ if ( (scrollingPix >= pixStart) && (scrollingPix < (pixStart + numPixmaps)) )
+ return true;
+ return false;
+}
+
+
void cView::CreateViewPixmap(int num, cTemplatePixmap *pix, cRect *size) {
cRect pixSize;
if (size) {
@@ -236,6 +269,9 @@ void cView::DrawPixmap(int num, cTemplatePixmap *pix, map < string, vector< map<
case ftDrawText:
DoDrawText(num, func);
break;
+ case ftDrawTextVertical:
+ DoDrawTextVertical(num, func);
+ break;
case ftDrawTextBox: {
int floating = func->GetNumericParameter(ptFloat);
if (floating > flNone) {
@@ -438,6 +474,53 @@ void cView::DoDrawText(int num, cTemplateFunction *func, int x0, int y0) {
DrawText(num, pos, text.c_str(), clr, clrBack, fontName, fontSize);
}
+void cView::DoDrawTextVertical(int num, cTemplateFunction *func, int x0, int y0) {
+ string fontName = func->GetFontName();
+ int fontSize = func->GetNumericParameter(ptFontSize);
+ tColor clr = func->GetColorParameter(ptColor);
+ tColor clrBack = clrTransparent;
+ string text = func->GetText(false);
+ cImage *textVertical = imgCache->GetVerticalText(text, clr, fontName, fontSize);
+ if (!textVertical)
+ return;
+
+ //align has to be set here because here we know the image size
+ int x = 0;
+ int y = 0;
+ int align = func->GetNumericParameter(ptAlign);
+ if (align == alCenter) {
+ int containerWidth = func->GetContainerWidth();
+ x = (containerWidth - textVertical->Width()) / 2;
+ } else if (align == alLeft) {
+ x = 0;
+ } else if (align = alRight) {
+ int containerWidth = func->GetContainerWidth();
+ x = (containerWidth - textVertical->Width());
+ } else {
+ x = func->GetNumericParameter(ptX);
+ }
+
+ int valign = func->GetNumericParameter(ptValign);
+ if (valign == alCenter) {
+ int containerHeight = func->GetContainerHeight();
+ y = (containerHeight - textVertical->Height()) / 2;
+ } else if (align == alTop) {
+ y = 0;
+ } else if (align = alBottom) {
+ int containerHeight = func->GetContainerHeight();
+ y = (containerHeight - textVertical->Height());
+ } else {
+ y = func->GetNumericParameter(ptY);
+ }
+
+ if (x < 0) x = 0;
+ x += x0;
+ if (y < 0) y = func->GetContainerHeight() - textVertical->Height() - 5;
+ y += y0;
+ cPoint pos(x,y);
+ DrawImage(num, pos, *textVertical);
+}
+
void cView::DoDrawTextBox(int num, cTemplateFunction *func, int x0, int y0) {
string text = func->GetText(false);
if (text.size() < 3)
@@ -858,17 +941,22 @@ cGrid::~cGrid() {
void cGrid::Set(double x, double y, double width, double height,
map <string,int> *intTokens, map <string,string> *stringTokens) {
+
if ((width != this->width) || (height != this->height)) {
+ this->width = width;
+ this->height = height;
resized = true;
dirty = false;
} else {
resized = false;
}
- this->x = x;
- this->y = y;
- this->width = width;
- this->height = height;
- moved = true;
+ if (this->x != x || this->y != y) {
+ this->x = x;
+ this->y = y;
+ moved = true;
+ } else {
+ moved = false;
+ }
if (intTokens) {
this->intTokens = *intTokens;
SetCurrent(current);
@@ -889,6 +977,8 @@ void cGrid::SetCurrent(bool current) {
}
void cGrid::Move(void) {
+ if (!tmplItem)
+ return;
tmplItem->InitIterator();
cTemplatePixmap *pix = NULL;
int pixCurrent = 0;
@@ -905,6 +995,8 @@ void cGrid::Move(void) {
}
void cGrid::Draw(void) {
+ if (!tmplItem)
+ return;
if (tmplItem->DebugTokens()) {
DebugTokens("Grid", &stringTokens, &intTokens);
}
diff --git a/views/view.h b/views/view.h
index 7b5bd9b..77ad318 100644
--- a/views/view.h
+++ b/views/view.h
@@ -13,6 +13,7 @@ private:
void Init(void);
void DoFill(int num, cTemplateFunction *func);
void DoDrawText(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
+ void DoDrawTextVertical(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
void DoDrawTextBox(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
void DoDrawFloatingTextBox(int num, cTemplateFunction *func);
void DoDrawRectangle(int num, cTemplateFunction *func, int x0 = 0, int y0 = 0);
@@ -40,7 +41,9 @@ protected:
int scrollSpeed;
void DrawViewElement(eViewElement ve, map <string,string> *stringTokens = NULL, map <string,int> *intTokens = NULL, map < string, vector< map< string, string > > > *loopTokens = NULL);
void ClearViewElement(eViewElement ve);
+ void DestroyViewElement(eViewElement ve);
bool ViewElementImplemented(eViewElement ve);
+ bool ViewElementScrolls(eViewElement ve);
void CreateViewPixmap(int num, cTemplatePixmap *pix, cRect *size = NULL);
void CreateScrollingPixmap(int num, cTemplatePixmap *pix, cSize &drawportSize);
void DrawPixmap(int num, cTemplatePixmap *pix, map < string, vector< map< string, string > > > *loopTokens = NULL, bool flushPerLoop = false);
diff --git a/views/viewgrid.c b/views/viewgrid.c
index 6488ccd..008133e 100644
--- a/views/viewgrid.c
+++ b/views/viewgrid.c
@@ -25,7 +25,6 @@ void cViewGrid::SetGrid(long gridID,
}
void cViewGrid::SetCurrent(long gridID, bool current) {
- esyslog("skindesigner: setting %ld to current %d", gridID, current);
map<long,cGrid*>::iterator hit = grids.find(gridID);
if (hit != grids.end())
(hit->second)->SetCurrent(current);
@@ -35,7 +34,6 @@ void cViewGrid::Delete(long gridID) {
map<long,cGrid*>::iterator hit = grids.find(gridID);
if (hit == grids.end())
return;
- esyslog("skindesigner: deleting grid %ld", gridID);
delete (hit->second);
grids.erase(gridID);
}
@@ -47,28 +45,43 @@ void cViewGrid::Clear(void) {
}
void cViewGrid::Render(void) {
- esyslog("skindesigner: rendering %ld grids", grids.size());
for (map < long, cGrid* >::iterator it = grids.begin(); it != grids.end(); it++) {
cGrid *grid = it->second;
if (grid->Dirty()) {
if (grid->Moved()) {
- grid->DeletePixmaps();
+ grid->Move();
}
- esyslog("skindesigner: rendering grid %ld", it->first);
+ grid->Clear();
+ //esyslog("skindesigner: rendering grid %ld", it->first);
grid->Draw();
} else if (grid->Resized()) {
- esyslog("skindesigner: resizing grid %ld", it->first);
+ //esyslog("skindesigner: resizing grid %ld", it->first);
grid->DeletePixmaps();
grid->Draw();
} else if (grid->Moved()) {
- esyslog("skindesigner: moving grid %ld", it->first);
- grid->Move();
+ //esyslog("skindesigner: moving grid %ld", it->first);
+ grid->Move();
} else {
- esyslog("skindesigner: skipping grid %ld", it->first);
+ //esyslog("skindesigner: skipping grid %ld", it->first);
}
}
}
+void cViewGrid::Hide(void) {
+ for (map < long, cGrid* >::iterator it = grids.begin(); it != grids.end(); it++) {
+ cGrid *grid = it->second;
+ grid->HidePixmaps();
+ }
+}
+
+void cViewGrid::Show(void) {
+ for (map < long, cGrid* >::iterator it = grids.begin(); it != grids.end(); it++) {
+ cGrid *grid = it->second;
+ grid->ShowPixmaps();
+ }
+}
+
+
void cViewGrid::Debug(void) {
} \ No newline at end of file
diff --git a/views/viewgrid.h b/views/viewgrid.h
index 84209c3..0fc11f6 100644
--- a/views/viewgrid.h
+++ b/views/viewgrid.h
@@ -20,6 +20,8 @@ public:
void Delete(long gridID);
void Clear(void);
void Render(void);
+ void Hide(void);
+ void Show(void);
void Debug(void);
};