summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-04-05 16:56:15 +0200
committerlouis <louis.braun@gmx.de>2015-04-05 16:56:15 +0200
commit3a53ab95b6abd1458c6bd8ebf53c3a868a6f2fcb (patch)
treeaa1ad8d4ca1d994755f3ea49b4d47cfd25657c2c
parent7bc7304d8400c419783f613febe4179ee8bd9366 (diff)
downloadvdr-plugin-skindesigner-3a53ab95b6abd1458c6bd8ebf53c3a868a6f2fcb.tar.gz
vdr-plugin-skindesigner-3a53ab95b6abd1458c6bd8ebf53c3a868a6f2fcb.tar.bz2
added category indicator token to default menus
-rw-r--r--HISTORY2
-rw-r--r--displaymenu.c5
-rw-r--r--libcore/imagecache.c5
-rw-r--r--libcore/imagecache.h2
-rw-r--r--libtemplate/templateview.c6
-rw-r--r--skins/blackhole/xmlfiles/displaymenudefault.xml1
-rw-r--r--skins/metrixhd/xmlfiles/displaymenudefault.xml40
-rw-r--r--skinskeleton/xmlfiles/displaymenudefault.xml11
-rw-r--r--views/displaymenuitemview.c39
-rw-r--r--views/displaymenuitemview.h6
-rw-r--r--views/displaymenulistview.c31
-rw-r--r--views/displaymenulistview.h7
-rw-r--r--views/displaymenurootview.c3
-rw-r--r--views/displaymenurootview.h2
14 files changed, 139 insertions, 21 deletions
diff --git a/HISTORY b/HISTORY
index 6701c7f..b3fffd7 100644
--- a/HISTORY
+++ b/HISTORY
@@ -276,3 +276,5 @@ Version 0.4.0
its own datetime display
- adapted Makefiles to work also in a LCLBLD environment
- reverted Makefile changes in parts
+- added category indicator token to default menus
+
diff --git a/displaymenu.c b/displaymenu.c
index 241503b..51b6d30 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -202,7 +202,10 @@ void cSDDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Sel
rootView->LockFlush();
eMenuCategory cat = MenuCategory();
if (cat == mcMain && rootView->SubViewAvailable()) {
- list->AddMainMenuItem(Index, Text, Current, Selectable);
+ string plugName = list->AddMainMenuItem(Index, Text, Current, Selectable);
+ if (Current) {
+ rootView->SetSelectedPluginMainMenu(plugName);
+ }
} else if (cat == mcSetup && rootView->SubViewAvailable()) {
list->AddSetupMenuItem(Index, Text, Current, Selectable);
} else {
diff --git a/libcore/imagecache.c b/libcore/imagecache.c
index 3d80f9b..af05777 100644
--- a/libcore/imagecache.c
+++ b/libcore/imagecache.c
@@ -188,7 +188,7 @@ cImage *cImageCache::GetIcon(eImageType type, string name, int width, int height
return NULL;
}
-string cImageCache::GetIconName(string label, eMenuCategory cat) {
+string cImageCache::GetIconName(string label, eMenuCategory cat, string plugName) {
//if cat is set, use standard menu entries
switch (cat) {
case mcSchedule:
@@ -267,6 +267,9 @@ string cImageCache::GetIconName(string label, eMenuCategory cat) {
}
} catch (...) {}
//check for Plugins
+ if (plugName.size() > 0) {
+ return *cString::sprintf("pluginicons/%s", plugName.c_str());
+ }
for (int i = 0; ; i++) {
cPlugin *p = cPluginManager::GetPlugin(i);
if (p) {
diff --git a/libcore/imagecache.h b/libcore/imagecache.h
index 207dbb0..e8a0365 100644
--- a/libcore/imagecache.h
+++ b/libcore/imagecache.h
@@ -25,7 +25,7 @@ public:
//icons
void CacheIcon(eImageType type, string path, int width, int height);
cImage *GetIcon(eImageType type, string name, int width, int height);
- string GetIconName(string label, eMenuCategory cat = mcUndefined);
+ string GetIconName(string label, eMenuCategory cat = mcUndefined, string plugName = "");
bool MenuIconExists(string name);
//skinparts
void CacheSkinpart(string path, int width, int height);
diff --git a/libtemplate/templateview.c b/libtemplate/templateview.c
index 352b6c7..5af8229 100644
--- a/libtemplate/templateview.c
+++ b/libtemplate/templateview.c
@@ -637,6 +637,11 @@ void cTemplateView::SetFunctionDefinitions(void) {
attributes.insert("mode");
funcsAllowed.insert(pair< string, set<string> >(name, attributes));
+ name = "listelement";
+ attributes.clear();
+ attributes.insert("debug");
+ funcsAllowed.insert(pair< string, set<string> >(name, attributes));
+
name = "area";
attributes.clear();
attributes.insert("debug");
@@ -1147,6 +1152,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) {
//definition of allowed parameters for currentitems viewlist
attributes.clear();
+ attributes.insert("debug");
attributes.insert("delay");
attributes.insert("fadetime");
funcsAllowed.insert(pair< string, set<string> >("currentelement", attributes));
diff --git a/skins/blackhole/xmlfiles/displaymenudefault.xml b/skins/blackhole/xmlfiles/displaymenudefault.xml
index 766f02c..6259feb 100644
--- a/skins/blackhole/xmlfiles/displaymenudefault.xml
+++ b/skins/blackhole/xmlfiles/displaymenudefault.xml
@@ -59,6 +59,7 @@
<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>
+
<areascroll scrollelement="column1" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="1%" width="{column1width}" layer="3">
<drawtext name="column1" x="{column1x}" width="{column1width}" valign="center" font="{regular}" fontsize="90%" color="{clrWhite}" text="{column1}" />
</areascroll>
diff --git a/skins/metrixhd/xmlfiles/displaymenudefault.xml b/skins/metrixhd/xmlfiles/displaymenudefault.xml
index 20ac1ba..e419ecc 100644
--- a/skins/metrixhd/xmlfiles/displaymenudefault.xml
+++ b/skins/metrixhd/xmlfiles/displaymenudefault.xml
@@ -113,7 +113,7 @@
<!-- IMPORTANT: menuitemwidth and determinatefont have to be defined here. menuitemwidth defines the total width of the
default menu items, determinatefont the function which sets the actual font to use. With that it is possible to determinate
the correct column widths -->
- <menuitems x="0" y="10%" orientation="vertical" width="100%" height="82%" align="center" menuitemwidth="94%" determinatefont="column1" numlistelements="16">
+ <menuitems x="0" y="10%" orientation="vertical" width="94%" height="82%" align="center" menuitemwidth="94%" determinatefont="column1" numlistelements="16">
<!-- Available Variables default menu listelement:
{nummenuitem} number of item in list, starts with 1
{column1} text of column1
@@ -140,18 +140,48 @@
{column6width} proposed width of column6
{columnscroll} number of column which should have scrollable text
{current} true if column is currently selected
- {separator} true if column is a list separator
+ {separator} true if column is a list separator
+
+ A dynamic token is set to indicate the current menu category or the plugin which is currently running.
+ With that it is possible to display different default menus with an individual style.
+ If a setup menu is diplayed, the token
+ {setup} is set to true
+ For the commands menu
+ {commands} is set to true
+ If a plugin is running, a token called as the name of the plugin is set to true
+ {pluginname} is set to true
-->
<listelement>
- <area x="0" width="95%" layer="2">
+ <area x="0" condition="not{separator}" width="100%" layer="2">
<fill condition="not{current}" color="{clrTransparent}" />
<fill condition="{current}" color="{clrTransBlueLight}" />
</area>
- <areascroll scrollelement="column1" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="1%" width="{column1width}" layer="3">
+ <!-- Separators -->
+ <area x="0" condition="{separator}" width="100%" layer="2">
+ <fill color="{clrDarkGray}" />
+ </area>
+ <area x="1%" condition="{separator}" width="98%" layer="3">
+ <drawtext align="left" valign="center" font="{light}" fontsize="90%" width="98%" color="{clrWhite}" text="{column1}" />
+ </area>
+
+ <!-- Setup Menus -->
+ <areascroll condition="not{separator} ++ {setup} ++ {column2set}" scrollelement="column1" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="1%" width="59%" layer="3">
+ <drawtext name="column1" x="0" width="99%" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{column1}" />
+ </areascroll>
+ <area x="60%" condition="not{separator} ++ {setup} ++ {column2set}" width="39%" layer="3">
+ <drawtext align="right" valign="center" font="{light}" fontsize="90%" width="99%" color="{clrWhite}" text="{column2}" />
+ </area>
+
+ <area x="1%" condition="not{separator} ++ {setup} ++ not{column2set}" width="98%" layer="3">
+ <drawtext align="left" valign="center" font="{light}" fontsize="90%" width="99%" color="{clrWhite}" text="{column1}" />
+ </area>
+
+ <!-- Default Menus -->
+ <areascroll condition="not{separator} ++ not{setup}" scrollelement="column1" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="1%" width="{column1width}" layer="3">
<drawtext name="column1" x="{column1x}" width="{column1width}" valign="center" font="{light}" fontsize="90%" color="{clrWhite}" text="{column1}" />
</areascroll>
- <area x="1%" width="100%" layer="3">
+ <area condition="not{separator} ++ not{setup}" x="1%" width="100%" layer="3">
<drawtext condition="{column2set}" x="{column2x}" valign="center" font="{light}" fontsize="90%" width="{column2width}" color="{clrWhite}" text="{column2}" />
<drawtext condition="{column3set}" x="{column3x}" valign="center" font="{light}" fontsize="90%" width="{column3width}" color="{clrWhite}" text="{column3}" />
<drawtext condition="{column4set}" x="{column4x}" valign="center" font="{light}" fontsize="90%" width="{column4width}" color="{clrWhite}" text="{column4}" />
diff --git a/skinskeleton/xmlfiles/displaymenudefault.xml b/skinskeleton/xmlfiles/displaymenudefault.xml
index 8f38b18..64036ff 100644
--- a/skinskeleton/xmlfiles/displaymenudefault.xml
+++ b/skinskeleton/xmlfiles/displaymenudefault.xml
@@ -28,7 +28,16 @@
{column5width} proposed width of column5
{column6width} proposed width of column6
{current} true if column is currently selected
- {separator} true if column is a list separator
+ {separator} true if column is a list separator
+
+ A dynamic token is set to indicate the current menu category or the plugin which is currently running.
+ With that it is possible to display different default menus with an individual style.
+ If a setup menu is diplayed, the token
+ {setup} is set to true
+ For the commands menu
+ {commands} is set to true
+ If a plugin is running, a token called as the name of the plugin is set to true
+ {pluginname} is set to true
-->
<listelement>
</listelement>
diff --git a/views/displaymenuitemview.c b/views/displaymenuitemview.c
index c0d3b42..1ce4066 100644
--- a/views/displaymenuitemview.c
+++ b/views/displaymenuitemview.c
@@ -106,6 +106,7 @@ cDisplayMenuItemDefaultView::cDisplayMenuItemDefaultView(cTemplateViewList *tmpl
this->tabs = tabs;
this->tabWidths = tabWidths;
maxTabs = cSkinDisplayMenu::MaxTabs;
+ menuCategory = "";
}
cDisplayMenuItemDefaultView::~cDisplayMenuItemDefaultView() {
@@ -138,6 +139,9 @@ void cDisplayMenuItemDefaultView::SetTokens(void) {
intTokens.insert(pair<string,int>("current", current));
intTokens.insert(pair<string,int>("separator", !selectable));
intTokens.insert(pair<string,int>("nummenuitem", num+1));
+ if (menuCategory.size() > 0) {
+ intTokens.insert(pair<string,int>(menuCategory, 1));
+ }
}
void cDisplayMenuItemDefaultView::Prepare(void) {
@@ -173,6 +177,10 @@ cDisplayMenuItemMainView::cDisplayMenuItemMainView(cTemplateViewList *tmplList,
number = "";
label = "";
icon = "";
+ isPlugin = false;
+ plugName = "";
+ SplitMenuText();
+ CheckPlugins();
}
cDisplayMenuItemMainView::~cDisplayMenuItemMainView() {
@@ -193,8 +201,11 @@ void cDisplayMenuItemMainView::SetTokens(void) {
void cDisplayMenuItemMainView::Prepare(void) {
ArrangeContainer();
- SplitMenuText();
- icon = imgCache->GetIconName(label);
+ if (isPlugin) {
+ icon = imgCache->GetIconName(label, mcUnknown, plugName);
+ } else {
+ icon = imgCache->GetIconName(label);
+ }
}
@@ -214,6 +225,12 @@ void cDisplayMenuItemMainView::Render(void) {
dirty = false;
}
+string cDisplayMenuItemMainView::GetPluginName(void) {
+ if (!isPlugin)
+ return "";
+ return plugName;
+}
+
void cDisplayMenuItemMainView::Debug(void) {
esyslog("skindesigner: Main Menu Item ---------------");
cDisplayMenuItemView::Debug();
@@ -266,6 +283,24 @@ void cDisplayMenuItemMainView::SplitMenuText(void) {
}
}
+void cDisplayMenuItemMainView::CheckPlugins(void) {
+ for (int i = 0; ; i++) {
+ cPlugin *p = cPluginManager::GetPlugin(i);
+ if (p) {
+ const char *mainMenuEntry = p->MainMenuEntry();
+ if (mainMenuEntry) {
+ string plugMainEntry = mainMenuEntry;
+ if (label.substr(0, plugMainEntry.size()) == plugMainEntry) {
+ isPlugin = true;
+ plugName = p->Name() ? p->Name() : "";
+ return;
+ }
+ }
+ } else
+ break;
+ }
+}
+
/*************************************************************
* cDisplayMenuItemSchedulesView
*************************************************************/
diff --git a/views/displaymenuitemview.h b/views/displaymenuitemview.h
index e9cfd5f..1108571 100644
--- a/views/displaymenuitemview.h
+++ b/views/displaymenuitemview.h
@@ -42,11 +42,13 @@ private:
int *tabWidths;
string *tabTexts;
int maxTabs;
+ string menuCategory;
public:
cDisplayMenuItemDefaultView(cTemplateViewList *tmplList, string *tabTexts, int *tabs, int *tabWidths, bool current, bool selectable);
virtual ~cDisplayMenuItemDefaultView();
void SetTabTexts(string *tabTexts);
void SetTokens(void);
+ void SetMenuCategory(string cat) { menuCategory = cat; };
void Prepare(void);
void Render(void);
void Debug(void);
@@ -54,17 +56,21 @@ public:
class cDisplayMenuItemMainView: public cDisplayMenuItemView {
private:
+ bool isPlugin;
+ string plugName;
string text;
string number;
string label;
string icon;
void SplitMenuText(void);
+ void CheckPlugins(void);
public:
cDisplayMenuItemMainView(cTemplateViewList *tmplList, string itemText, bool current, bool selectable);
virtual ~cDisplayMenuItemMainView();
void SetTokens(void);
void Prepare(void);
void Render(void);
+ string GetPluginName(void);
void Debug(void);
};
diff --git a/views/displaymenulistview.c b/views/displaymenulistview.c
index 3a51b82..87845d7 100644
--- a/views/displaymenulistview.c
+++ b/views/displaymenulistview.c
@@ -2,7 +2,7 @@
#include "displaymenulistview.h"
-cDisplayMenuListView::cDisplayMenuListView(cTemplateViewList *tmplList, int count) {
+cDisplayMenuListView::cDisplayMenuListView(cTemplateViewList *tmplList, int count, eMenuCategory cat, string currentPlug) {
oneColumn = true;
this->tmplList = tmplList;
if (count < 0) {
@@ -15,6 +15,8 @@ cDisplayMenuListView::cDisplayMenuListView(cTemplateViewList *tmplList, int coun
intTokens.insert(pair<string,int>("numelements", count));
tmplList->CalculateListParameters(&intTokens);
}
+ this->cat = cat;
+ this->currentPlug = currentPlug;
menuItems = new cDisplayMenuItemView*[itemCount];
for (int i=0; i<itemCount; i++)
menuItems[i] = NULL;
@@ -111,19 +113,24 @@ void cDisplayMenuListView::AddDefaultMenuItem(int index, string *tabTexts, bool
break;
}
}
- cDisplayMenuItemView *item = new cDisplayMenuItemDefaultView(tmplList, tabTexts, tabs, tabWidths, current, selectable);
+ cDisplayMenuItemDefaultView *item = new cDisplayMenuItemDefaultView(tmplList, tabTexts, tabs, tabWidths, current, selectable);
+ item->SetMenuCategory(GetDefaultMenuCategory());
menuItems[index] = item;
}
-void cDisplayMenuListView::AddMainMenuItem(int index, const char *itemText, bool current, bool selectable) {
+string cDisplayMenuListView::AddMainMenuItem(int index, const char *itemText, bool current, bool selectable) {
if (index >= itemCount)
- return;
+ return "";
if (menuItems[index]) {
- menuItems[index]->SetCurrent(current);
- return;
+ cDisplayMenuItemMainView *menuItem = dynamic_cast<cDisplayMenuItemMainView*>(menuItems[index]);
+ if (!menuItem)
+ return "";
+ menuItem->SetCurrent(current);
+ return menuItem->GetPluginName();
}
- cDisplayMenuItemView *item = new cDisplayMenuItemMainView(tmplList, itemText, current, selectable);
+ cDisplayMenuItemMainView *item = new cDisplayMenuItemMainView(tmplList, itemText, current, selectable);
menuItems[index] = item;
+ return item->GetPluginName();
}
void cDisplayMenuListView::AddSetupMenuItem(int index, const char *itemText, bool current, bool selectable) {
@@ -241,3 +248,13 @@ void cDisplayMenuListView::Debug(void) {
}
}
}
+
+string cDisplayMenuListView::GetDefaultMenuCategory(void) {
+ if (cat == mcSchedule || cat == mcScheduleNow || cat == mcScheduleNext)
+ return "schedule";
+ else if (cat >= mcPluginSetup && cat <= mcSetupPlugins)
+ return "setup";
+ else if (cat == mcCommand)
+ return "commands";
+ return currentPlug;
+}
diff --git a/views/displaymenulistview.h b/views/displaymenulistview.h
index a407020..60758cf 100644
--- a/views/displaymenulistview.h
+++ b/views/displaymenulistview.h
@@ -8,20 +8,23 @@
class cDisplayMenuListView {
private:
cTemplateViewList *tmplList;
+ eMenuCategory cat;
+ string currentPlug;
int itemCount;
cDisplayMenuItemView **menuItems;
int *tabs;
int *tabWidths;
bool oneColumn;
+ string GetDefaultMenuCategory(void);
public:
- cDisplayMenuListView(cTemplateViewList *tmplList, int count = -1);
+ cDisplayMenuListView(cTemplateViewList *tmplList, int count, eMenuCategory cat = mcUnknown, string currentPlug = "");
virtual ~cDisplayMenuListView();
void Clear(void);
void SetTabs(int tab1, int tab2, int tab3, int tab4, int tab5);
int GetMaxItems(void) { return itemCount; };
int GetListWidth(void);
void AddDefaultMenuItem(int index, string *tabTexts, bool current, bool selectable);
- void AddMainMenuItem(int index, const char *itemText, bool current, bool selectable);
+ string AddMainMenuItem(int index, const char *itemText, bool current, bool selectable);
void AddSetupMenuItem(int index, const char *itemText, bool current, bool selectable);
void AddSchedulesMenuItem(int index, const cEvent *event, const cChannel *channel, eTimerMatch timerMatch, eMenuCategory cat, bool isEpgSearchFav, bool current, bool selectable);
void AddChannelsMenuItem(int index, const cChannel *channel, bool withProvider, bool current, bool selectable);
diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c
index 5d429cd..c101d38 100644
--- a/views/displaymenurootview.c
+++ b/views/displaymenurootview.c
@@ -7,6 +7,7 @@
cDisplayMenuRootView::cDisplayMenuRootView(cTemplateView *rootView) : cView(rootView) {
cat = mcUndefined;
+ selectedPluginMainMenu = "";
sortMode = msmUnknown;
sortModeLast = msmUnknown;
menuTitle = "";
@@ -208,7 +209,7 @@ void cDisplayMenuRootView::SetMenu(eMenuCategory menuCat, bool menuInit) {
cTemplateViewList *tmplMenuItems = subView->GetViewList(vlMenuItem);
if (!tmplMenuItems)
return;
- listView = new cDisplayMenuListView(tmplMenuItems);
+ listView = new cDisplayMenuListView(tmplMenuItems, -1, menuCat, selectedPluginMainMenu);
} else {
//Create detailed view
detailView = new cDisplayMenuDetailView(subView);
diff --git a/views/displaymenurootview.h b/views/displaymenurootview.h
index 4a250bc..79b4b56 100644
--- a/views/displaymenurootview.h
+++ b/views/displaymenurootview.h
@@ -15,6 +15,7 @@ enum ePluginMenuType {
class cDisplayMenuRootView : public cView, public cViewHelpers {
private:
eMenuCategory cat;
+ string selectedPluginMainMenu;
eMenuSortMode sortMode;
eMenuSortMode sortModeLast;
eSubView viewType;
@@ -51,6 +52,7 @@ public:
virtual ~cDisplayMenuRootView();
bool createOsd(void);
void SetMenu(eMenuCategory menuCat, bool menuInit);
+ void SetSelectedPluginMainMenu(string name) { selectedPluginMainMenu = name; };
void SetSortMode(eMenuSortMode sortMode);
void SetCurrentRecording(string rec) { currentRecording = rec; };
void CorrectDefaultMenu(void);