summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2015-05-14 11:26:30 +0200
committerlouis <louis.braun@gmx.de>2015-05-14 11:26:30 +0200
commit8d7584d66eda54d751336b4b5beaca7056219d25 (patch)
tree94df4f3b6cac84a573b0d7719c9800d272406b56
parent9a0217589ef98f0af13bd623a6e7870d566779f6 (diff)
downloadvdr-plugin-skindesigner-8d7584d66eda54d751336b4b5beaca7056219d25.tar.gz
vdr-plugin-skindesigner-8d7584d66eda54d751336b4b5beaca7056219d25.tar.bz2
chachged displaymessage in menus to detachable
-rw-r--r--HISTORY1
-rw-r--r--dtd/displaymenu.dtd8
-rw-r--r--skins/blackhole/xmlfiles/displaymenu.xml2
-rw-r--r--views/displaymenurootview.c35
-rw-r--r--views/displaymenuview.c33
-rw-r--r--views/displaymessageview.c9
-rw-r--r--views/displaymessageview.h2
-rw-r--r--views/displayviewelements.c15
-rw-r--r--views/displayviewelements.h10
-rw-r--r--views/view.c10
-rw-r--r--views/view.h1
-rw-r--r--views/viewhelpers.c8
-rw-r--r--views/viewhelpers.h1
13 files changed, 101 insertions, 34 deletions
diff --git a/HISTORY b/HISTORY
index c6a1073..1caafd9 100644
--- a/HISTORY
+++ b/HISTORY
@@ -322,4 +322,5 @@ Version 0.4.5
correctly
- implemented shiftout for views
- fixed blinking for animated views
+- chachged displaymessage in menus to detachable
diff --git a/dtd/displaymenu.dtd b/dtd/displaymenu.dtd
index 3f1747a..30b34da 100644
--- a/dtd/displaymenu.dtd
+++ b/dtd/displaymenu.dtd
@@ -66,6 +66,14 @@
<!ELEMENT message (area|areascroll)*>
<!ATTLIST message
+ detached CDATA #IMPLIED
+ delay CDATA #IMPLIED
+ fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ shifttype CDATA #IMPLIED
+ shiftmode CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
diff --git a/skins/blackhole/xmlfiles/displaymenu.xml b/skins/blackhole/xmlfiles/displaymenu.xml
index a96521e..26199da 100644
--- a/skins/blackhole/xmlfiles/displaymenu.xml
+++ b/skins/blackhole/xmlfiles/displaymenu.xml
@@ -94,7 +94,7 @@
{warning} true if message is an warn message
{error} true if message is an error message
-->
- <message>
+ <message detached="true" delay="0" shifttime="{shifttimemessage}" shifttype="bottom" shiftmode="slowed">
<area x="5%" y="80%" width="90%" height="15%" layer="6">
<drawimage condition="{status}" imagetype="skinpart" path="messageblue" x="0" y="0" width="100%" height="100%" />
<drawimage condition="{info}" imagetype="skinpart" path="messagegreen" x="0" y="0" width="100%" height="100%" />
diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c
index 74e805f..6de16c7 100644
--- a/views/displaymenurootview.c
+++ b/views/displaymenurootview.c
@@ -680,21 +680,30 @@ void cDisplayMenuRootView::DrawColorButtons(void) {
void cDisplayMenuRootView::DrawMessage(eMessageType type, const char *text) {
if (!text) {
- ClearViewElement(veMessage);
+ if (DetachViewElement(veMessage))
+ DestroyDetachedViewElement(veMessage);
+ else
+ ClearViewElement(veMessage);
return;
}
-
- map < string, string > stringTokens;
- map < string, int > intTokens;
-
- intTokens.insert(pair<string, int>("status", (type == mtStatus) ? true : false));
- intTokens.insert(pair<string, int>("info", (type == mtInfo) ? true : false));
- intTokens.insert(pair<string, int>("warning", (type == mtWarning) ? true : false));
- intTokens.insert(pair<string, int>("error", (type == mtError) ? true : false));
- stringTokens.insert(pair<string,string>("text", text));
-
- ClearViewElement(veMessage);
- DrawViewElement(veMessage, &stringTokens, &intTokens);
+
+ if (DetachViewElement(veMessage)) {
+ cViewElement *viewElement = GetViewElement(veMessage);
+ if (!viewElement) {
+ viewElement = new cViewElementMenuMessage(tmplView->GetViewElement(veMessage), type, text);
+ AddViewElement(veMessage, viewElement);
+ viewElement->Start();
+ } else {
+ if (!viewElement->Starting())
+ viewElement->Render();
+ }
+ } else {
+ map < string, string > stringTokens;
+ map < string, int > intTokens;
+ SetMenuMessage(type, text, stringTokens, intTokens);
+ ClearViewElement(veMessage);
+ DrawViewElement(veMessage, &stringTokens, &intTokens);
+ }
}
void cDisplayMenuRootView::Action(void) {
diff --git a/views/displaymenuview.c b/views/displaymenuview.c
index a70535d..a7e840d 100644
--- a/views/displaymenuview.c
+++ b/views/displaymenuview.c
@@ -173,20 +173,31 @@ bool cDisplayMenuView::DrawMessage(eMessageType type, const char *text) {
return false;
}
if (!text) {
- ClearViewElement(veMessage);
+ if (DetachViewElement(veMessage))
+ DestroyDetachedViewElement(veMessage);
+ else
+ ClearViewElement(veMessage);
return true;
}
- map < string, string > stringTokens;
- map < string, int > intTokens;
- intTokens.insert(pair<string, int>("status", (type == mtStatus) ? true : false));
- intTokens.insert(pair<string, int>("info", (type == mtInfo) ? true : false));
- intTokens.insert(pair<string, int>("warning", (type == mtWarning) ? true : false));
- intTokens.insert(pair<string, int>("error", (type == mtError) ? true : false));
- stringTokens.insert(pair<string,string>("text", text));
-
- ClearViewElement(veMessage);
- DrawViewElement(veMessage, &stringTokens, &intTokens);
+ if (DetachViewElement(veMessage)) {
+ cViewElement *viewElement = GetViewElement(veMessage);
+ if (!viewElement) {
+ viewElement = new cViewElementMenuMessage(tmplView->GetViewElement(veMessage), type, text);
+ AddViewElement(veMessage, viewElement);
+ viewElement->Start();
+ } else {
+ if (!viewElement->Starting())
+ viewElement->Render();
+ }
+ } else {
+ map < string, string > stringTokens;
+ map < string, int > intTokens;
+
+ SetMenuMessage(type, text, stringTokens, intTokens);
+ ClearViewElement(veMessage);
+ DrawViewElement(veMessage, &stringTokens, &intTokens);
+ }
return true;
}
diff --git a/views/displaymessageview.c b/views/displaymessageview.c
index 85727cb..6f92f5b 100644
--- a/views/displaymessageview.c
+++ b/views/displaymessageview.c
@@ -30,14 +30,7 @@ void cDisplayMessageView::DrawBackground(void) {
void cDisplayMessageView::DrawMessage(eMessageType type, const char *text) {
map < string, string > stringTokens;
map < string, int > intTokens;
-
- stringTokens.insert(pair<string,string>("text", text));
-
- intTokens.insert(pair<string,int>("status", (type == mtStatus) ? true : false));
- intTokens.insert(pair<string,int>("info", (type == mtInfo) ? true : false));
- intTokens.insert(pair<string,int>("warning", (type == mtWarning) ? true : false));
- intTokens.insert(pair<string,int>("error", (type == mtError) ? true : false));
-
+ SetMenuMessage(type, text, stringTokens, intTokens);
DrawViewElement(veMessage, &stringTokens, &intTokens);
}
diff --git a/views/displaymessageview.h b/views/displaymessageview.h
index 8e68d49..bab15c6 100644
--- a/views/displaymessageview.h
+++ b/views/displaymessageview.h
@@ -4,7 +4,7 @@
#include "../libtemplate/template.h"
#include "view.h"
-class cDisplayMessageView : public cView {
+class cDisplayMessageView : public cView, public cViewHelpers {
public:
cDisplayMessageView(cTemplateView *tmplView);
virtual ~cDisplayMessageView();
diff --git a/views/displayviewelements.c b/views/displayviewelements.c
index 5f337a3..b09f1d5 100644
--- a/views/displayviewelements.c
+++ b/views/displayviewelements.c
@@ -122,3 +122,18 @@ bool cViewElementMenuHeader::Render(void) {
DrawViewElement(veHeader, &stringTokens, &intTokens);
return true;
}
+
+/********************************************************************************************************************/
+
+cViewElementMenuMessage::cViewElementMenuMessage(cTemplateViewElement *tmplViewElement, eMessageType type, string text) : cViewElement(tmplViewElement) {
+ this->type = type;
+ this->text = text;
+}
+
+bool cViewElementMenuMessage::Render(void) {
+ ClearTokens();
+ SetMenuMessage(type, text, stringTokens, intTokens);
+ ClearViewElement(veMessage);
+ DrawViewElement(veMessage, &stringTokens, &intTokens);
+ return true;
+}
diff --git a/views/displayviewelements.h b/views/displayviewelements.h
index 0dcd45b..d55f562 100644
--- a/views/displayviewelements.h
+++ b/views/displayviewelements.h
@@ -75,4 +75,14 @@ public:
bool Render(void);
};
+class cViewElementMenuMessage : public cViewElement, public cViewHelpers {
+private:
+ eMessageType type;
+ string text;
+public:
+ cViewElementMenuMessage(cTemplateViewElement *tmplViewElement, eMessageType type, string text);
+ virtual ~cViewElementMenuMessage() {};
+ bool Render(void);
+};
+
#endif //__DISPLAYCHANNELVIEWELEMENTS_H \ No newline at end of file
diff --git a/views/view.c b/views/view.c
index b8e5840..0d59019 100644
--- a/views/view.c
+++ b/views/view.c
@@ -245,6 +245,16 @@ void cView::DestroyViewElement(eViewElement ve) {
ClearAnimations(ve);
}
+void cView::DestroyDetachedViewElement(eViewElement ve) {
+ map < eViewElement, cViewElement* >::iterator hit = detachedViewElements.find(ve);
+ if (hit == detachedViewElements.end())
+ return;
+ cViewElement *viewElement = hit->second;
+ delete viewElement;
+ detachedViewElements.erase(hit);
+}
+
+
void cView::ClearAnimations(int cat) {
//stop and delete all animated elements from this viewelement
if (animations.size() == 0)
diff --git a/views/view.h b/views/view.h
index f7d2ab5..1dcaef9 100644
--- a/views/view.h
+++ b/views/view.h
@@ -58,6 +58,7 @@ protected:
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);
+ void DestroyDetachedViewElement(eViewElement ve);
void ClearAnimations(int cat);
bool ExecuteViewElement(eViewElement ve);
bool DetachViewElement(eViewElement ve);
diff --git a/views/viewhelpers.c b/views/viewhelpers.c
index 8598e7c..c43a068 100644
--- a/views/viewhelpers.c
+++ b/views/viewhelpers.c
@@ -1125,3 +1125,11 @@ bool cViewHelpers::CompareECMInfos(sDVBAPIEcmInfo *ecmInfo) {
return false;
return true;
}
+
+void cViewHelpers::SetMenuMessage(eMessageType type, string text, stringmap &stringTokens, intmap &intTokens) {
+ intTokens.insert(pair<string, int>("status", (type == mtStatus) ? true : false));
+ intTokens.insert(pair<string, int>("info", (type == mtInfo) ? true : false));
+ intTokens.insert(pair<string, int>("warning", (type == mtWarning) ? true : false));
+ intTokens.insert(pair<string, int>("error", (type == mtError) ? true : false));
+ stringTokens.insert(pair<string,string>("text", text));
+}
diff --git a/views/viewhelpers.h b/views/viewhelpers.h
index 3ba13b3..2ef4980 100644
--- a/views/viewhelpers.h
+++ b/views/viewhelpers.h
@@ -37,6 +37,7 @@ protected:
void SetMenuHeader(eMenuCategory cat, string menuTitle, stringmap &stringTokens, intmap &intTokens);
void SetCurrentSchedule(string recName, stringmap &stringTokens, intmap &intTokens);
bool SetEcmInfos(int channelSid, stringmap &stringTokens, intmap &intTokens);
+ void SetMenuMessage(eMessageType type, string text, stringmap &stringTokens, intmap &intTokens);
public:
cViewHelpers(void);
virtual ~cViewHelpers(void);