diff options
author | louis <louis.braun@gmx.de> | 2015-05-14 11:26:30 +0200 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2015-05-14 11:26:30 +0200 |
commit | 8d7584d66eda54d751336b4b5beaca7056219d25 (patch) | |
tree | 94df4f3b6cac84a573b0d7719c9800d272406b56 | |
parent | 9a0217589ef98f0af13bd623a6e7870d566779f6 (diff) | |
download | vdr-plugin-skindesigner-8d7584d66eda54d751336b4b5beaca7056219d25.tar.gz vdr-plugin-skindesigner-8d7584d66eda54d751336b4b5beaca7056219d25.tar.bz2 |
chachged displaymessage in menus to detachable
-rw-r--r-- | HISTORY | 1 | ||||
-rw-r--r-- | dtd/displaymenu.dtd | 8 | ||||
-rw-r--r-- | skins/blackhole/xmlfiles/displaymenu.xml | 2 | ||||
-rw-r--r-- | views/displaymenurootview.c | 35 | ||||
-rw-r--r-- | views/displaymenuview.c | 33 | ||||
-rw-r--r-- | views/displaymessageview.c | 9 | ||||
-rw-r--r-- | views/displaymessageview.h | 2 | ||||
-rw-r--r-- | views/displayviewelements.c | 15 | ||||
-rw-r--r-- | views/displayviewelements.h | 10 | ||||
-rw-r--r-- | views/view.c | 10 | ||||
-rw-r--r-- | views/view.h | 1 | ||||
-rw-r--r-- | views/viewhelpers.c | 8 | ||||
-rw-r--r-- | views/viewhelpers.h | 1 |
13 files changed, 101 insertions, 34 deletions
@@ -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); |