From 229b1274a5c7bd8bf4d1b101dab83094ff3f9c06 Mon Sep 17 00:00:00 2001 From: louis Date: Fri, 13 Mar 2015 18:00:39 +0100 Subject: [PATCH] checking setup conditions for viewelements --- HISTORY | 1 + dtd/displayaudiotracks.dtd | 2 ++ dtd/displaychannel.dtd | 18 +++++++++++ dtd/displaymenu.dtd | 17 +++++++++++ dtd/displayreplay.dtd | 16 ++++++++++ libtemplate/templateview.c | 9 ++++++ libtemplate/templateview.h | 1 + libtemplate/templateviewelement.c | 9 +++++- libtemplate/templateviewelement.h | 1 + libtemplate/xmlparser.c | 11 ++++--- libtemplate/xmlparser.h | 2 +- skins/blackhole/xmlfiles/displaychannel.xml | 4 +-- views/displayaudiotracksview.c | 4 +-- views/displaychannelview.c | 26 ++++++++-------- views/displaymenudetailview.c | 2 +- views/displaymenurootview.c | 8 ++--- views/displaymenuview.c | 34 ++++++++++----------- views/displaypluginview.c | 2 +- views/displayreplayview.c | 8 ++--- views/view.c | 5 ++- views/view.h | 2 +- 21 files changed, 129 insertions(+), 53 deletions(-) diff --git a/HISTORY b/HISTORY index e4b78ca..ae0ecd4 100644 --- a/HISTORY +++ b/HISTORY @@ -208,3 +208,4 @@ Version 0.2.2 Version 0.3.0 +- checking setup conditions for viewelements diff --git a/dtd/displayaudiotracks.dtd b/dtd/displayaudiotracks.dtd index e6cd869..31e9802 100644 --- a/dtd/displayaudiotracks.dtd +++ b/dtd/displayaudiotracks.dtd @@ -18,11 +18,13 @@ diff --git a/dtd/displaychannel.dtd b/dtd/displaychannel.dtd index c3d3761..fcae25d 100644 --- a/dtd/displaychannel.dtd +++ b/dtd/displaychannel.dtd @@ -21,91 +21,109 @@ %functions; diff --git a/dtd/displaymenu.dtd b/dtd/displaymenu.dtd index b14c3da..1e2b6f5 100644 --- a/dtd/displaymenu.dtd +++ b/dtd/displaymenu.dtd @@ -18,86 +18,103 @@ diff --git a/dtd/displayreplay.dtd b/dtd/displayreplay.dtd index c2333c3..bb52937 100644 --- a/dtd/displayreplay.dtd +++ b/dtd/displayreplay.dtd @@ -32,66 +32,79 @@ @@ -99,6 +112,7 @@ debug CDATA #IMPLIED delay CDATA #REQUIRED fadetime CDATA #IMPLIED + condition CDATA #IMPLIED > @@ -106,11 +120,13 @@ debug CDATA #IMPLIED delay CDATA #REQUIRED fadetime CDATA #IMPLIED + condition CDATA #IMPLIED > %functions; \ No newline at end of file diff --git a/libtemplate/templateview.c b/libtemplate/templateview.c index c37b5f0..60cd36a 100644 --- a/libtemplate/templateview.c +++ b/libtemplate/templateview.c @@ -194,6 +194,14 @@ int cTemplateView::GetNumPixmapsViewElement(eViewElement ve) { return viewElement->GetNumPixmaps(); } +bool cTemplateView::ExecuteView(eViewElement ve) { + map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve); + if (hit == viewElements.end()) + return false; + cTemplateViewElement *viewElement = hit->second; + return viewElement->Execute(); +} + int cTemplateView::GetNumListViewMenuItems(void) { int numElements = 0; cTemplateViewList *menuList = GetViewList(vlMenuItem); @@ -552,6 +560,7 @@ void cTemplateView::SetFunctionDefinitions(void) { attributes.insert("delay"); attributes.insert("fadetime"); attributes.insert("name"); + attributes.insert("condition"); funcsAllowed.insert(pair< string, set >(name, attributes)); name = "area"; diff --git a/libtemplate/templateview.h b/libtemplate/templateview.h index 79564b7..c8ee2e1 100644 --- a/libtemplate/templateview.h +++ b/libtemplate/templateview.h @@ -109,6 +109,7 @@ public: cRect GetOsdSize(void); int GetNumPixmaps(void); int GetNumPixmapsViewElement(eViewElement ve); + bool ExecuteView(eViewElement ve); int GetNumListViewMenuItems(void); bool GetScalingWindow(cRect &scalingWindow); map GetCustomStringTokens(void) { return globals->GetCustomStringTokens(); }; diff --git a/libtemplate/templateviewelement.c b/libtemplate/templateviewelement.c index 1a2ef6e..8c9541a 100644 --- a/libtemplate/templateviewelement.c +++ b/libtemplate/templateviewelement.c @@ -46,7 +46,7 @@ bool cTemplateViewElement::CalculateParameters(void) { parameters->SetContainer(containerX, containerY, containerWidth, containerHeight); parameters->SetGlobals(globals); paramsValid = parameters->CalculateParameters(); - + parameters->ParseParameters(); return paramsValid; } @@ -118,6 +118,13 @@ cTemplateFunction *cTemplateViewElement::GetFunction(string name) { return NULL; } +bool cTemplateViewElement::Execute(void) { + if (!parameters) + return true; + return parameters->DoExecute(); +} + + bool cTemplateViewElement::DebugTokens(void) { if (!parameters) return false; diff --git a/libtemplate/templateviewelement.h b/libtemplate/templateviewelement.h index be7bb74..1456de6 100644 --- a/libtemplate/templateviewelement.h +++ b/libtemplate/templateviewelement.h @@ -105,6 +105,7 @@ public: void InitIterator(void); cTemplatePixmap *GetNextPixmap(void); cTemplateFunction *GetFunction(string name); + bool Execute(void); bool DebugTokens(void); virtual void Debug(void); }; diff --git a/libtemplate/xmlparser.c b/libtemplate/xmlparser.c index aa7d498..f5f3d6e 100644 --- a/libtemplate/xmlparser.c +++ b/libtemplate/xmlparser.c @@ -191,7 +191,7 @@ bool cXmlParser::ParseView(void) { } else if (view->ValidViewElement((const char*)node->name)) { xmlAttrPtr attr = node->properties; vector > attribs; - ParseAttributes(attr, node, attribs); + ParseAttributes(attr, node, attribs, true); ParseViewElement(node->name, node->xmlChildrenNode, attribs); } else if (view->ValidViewList((const char*)node->name)) { ParseViewList(node); @@ -682,7 +682,7 @@ bool cXmlParser::ParseSubView(xmlNodePtr node) { if (subView->ValidViewElement((const char*)childNode->name)) { xmlAttrPtr attr = childNode->properties; vector > attribs; - ParseAttributes(attr, childNode, attribs); + ParseAttributes(attr, childNode, attribs, true); ParseViewElement(childNode->name, childNode->xmlChildrenNode, attribs, subView); } else if (subView->ValidViewList((const char*)childNode->name)) { ParseViewList(childNode, subView); @@ -954,7 +954,7 @@ void cXmlParser::ParseLoopFunctionCalls(xmlNodePtr node, cTemplateLoopFunction * } } -bool cXmlParser::ParseAttributes(xmlAttrPtr attr, xmlNodePtr node, vector > &attribs) { +bool cXmlParser::ParseAttributes(xmlAttrPtr attr, xmlNodePtr node, vector > &attribs, bool isViewElement) { if (attr == NULL) { return false; } @@ -965,15 +965,16 @@ bool cXmlParser::ParseAttributes(xmlAttrPtr attr, xmlNodePtr node, vectorname; + /* if (!name.compare("debug")) { attribs.push_back(pair((const char*)attr->name, "true")); attr = attr->next; continue; } - + */ xmlChar *value = NULL; value = xmlGetProp(node, attr->name); - if (!view->ValidAttribute((const char*)node->name, (const char*)attr->name)) { + if (!view->ValidAttribute(isViewElement ? "viewelement" : (const char*)node->name, (const char*)attr->name)) { esyslog("skindesigner: unknown attribute %s in %s", (const char*)attr->name, (const char*)node->name); attr = attr->next; if (value) diff --git a/libtemplate/xmlparser.h b/libtemplate/xmlparser.h index 8698196..58d4e91 100644 --- a/libtemplate/xmlparser.h +++ b/libtemplate/xmlparser.h @@ -47,7 +47,7 @@ private: void ParseGrid(xmlNodePtr node, vector > &attributes); void ParseFunctionCalls(xmlNodePtr node, cTemplatePixmap *pix); void ParseLoopFunctionCalls(xmlNodePtr node, cTemplateLoopFunction *loopFunc); - bool ParseAttributes(xmlAttrPtr attr, xmlNodePtr node, vector > &attribs); + bool ParseAttributes(xmlAttrPtr attr, xmlNodePtr node, vector > &attribs, bool isViewElement = false); public: cXmlParser(void); virtual ~cXmlParser(void); diff --git a/skins/blackhole/xmlfiles/displaychannel.xml b/skins/blackhole/xmlfiles/displaychannel.xml index 83a7f7d..2385596 100644 --- a/skins/blackhole/xmlfiles/displaychannel.xml +++ b/skins/blackhole/xmlfiles/displaychannel.xml @@ -184,8 +184,8 @@ {devices[channelid]} ID of the currently tuned channel {devices[source]} source of the currently tuned channel --> - - + + diff --git a/views/displayaudiotracksview.c b/views/displayaudiotracksview.c index c4b9f9a..c97bc5e 100644 --- a/views/displayaudiotracksview.c +++ b/views/displayaudiotracksview.c @@ -32,7 +32,7 @@ bool cDisplayAudiotracksView::createOsd(void) { } void cDisplayAudiotracksView::DrawBackground(void) { - if (!ViewElementImplemented(veBackground)) { + if (!ExecuteViewElement(veBackground)) { return; } @@ -45,7 +45,7 @@ void cDisplayAudiotracksView::DrawBackground(void) { } void cDisplayAudiotracksView::DrawHeader(const char *title, int audioChannel) { - if (!ViewElementImplemented(veHeader)) { + if (!ExecuteViewElement(veHeader)) { return; } diff --git a/views/displaychannelview.c b/views/displaychannelview.c index 6348f7d..384ae67 100644 --- a/views/displaychannelview.c +++ b/views/displaychannelview.c @@ -60,7 +60,7 @@ void cDisplayChannelView::ClearChannel(void) { } void cDisplayChannelView::DrawDate(void) { - if (!ViewElementImplemented(veDateTime)) { + if (!ExecuteViewElement(veDateTime)) { return; } @@ -76,7 +76,7 @@ void cDisplayChannelView::DrawDate(void) { } void cDisplayChannelView::DrawTime(void) { - if (!ViewElementImplemented(veTime)) { + if (!ExecuteViewElement(veTime)) { return; } @@ -91,7 +91,7 @@ void cDisplayChannelView::DrawTime(void) { } void cDisplayChannelView::DrawProgressBar(cString &start, cString &stop, int Current, int Total) { - if (!ViewElementImplemented(veProgressBar)) { + if (!ExecuteViewElement(veProgressBar)) { return; } @@ -182,7 +182,7 @@ void cDisplayChannelView::ClearEPGInfo(void) { } void cDisplayChannelView::DrawStatusIcons(const cChannel *Channel) { - if (!ViewElementImplemented(veStatusInfo)) { + if (!ExecuteViewElement(veStatusInfo)) { return; } @@ -217,7 +217,7 @@ void cDisplayChannelView::ClearStatusIcons(void) { } void cDisplayChannelView::DrawAudioInfo(void) { - if (!ViewElementImplemented(veAudioInfo)) { + if (!ExecuteViewElement(veAudioInfo)) { return; } @@ -261,7 +261,7 @@ void cDisplayChannelView::ClearAudioInfo(void) { } void cDisplayChannelView::DrawScreenResolution(void) { - if (!ViewElementImplemented(veScreenResolution)) { + if (!ExecuteViewElement(veScreenResolution)) { return; } @@ -311,7 +311,7 @@ void cDisplayChannelView::DrawScraperContent(const cEvent *event) { return; } - if (!ViewElementImplemented(veScraperContent)) { + if (!ExecuteViewElement(veScraperContent)) { return; } @@ -390,7 +390,7 @@ void cDisplayChannelView::ClearScraperContent(void) { } void cDisplayChannelView::DrawSignal(void) { - if (!ViewElementImplemented(veSignalQuality)) { + if (!ExecuteViewElement(veSignalQuality)) { return; } time_t Now = time(NULL); @@ -426,7 +426,7 @@ void cDisplayChannelView::DrawSignal(void) { } void cDisplayChannelView::DrawSignalBackground(void) { - if (!ViewElementImplemented(veSignalQualityBack)) { + if (!ExecuteViewElement(veSignalQualityBack)) { return; } DrawViewElement(veSignalQualityBack); @@ -442,7 +442,7 @@ void cDisplayChannelView::ClearSignalBackground(void) { } void cDisplayChannelView::DrawDevices(bool initial) { - if (!ViewElementImplemented(veDevices)) { + if (!ExecuteViewElement(veDevices)) { return; } map < string, string > stringTokens; @@ -465,7 +465,7 @@ void cDisplayChannelView::ClearDevices(void) { } void cDisplayChannelView::DrawChannelGroups(const cChannel *Channel, cString ChannelName) { - if (!ViewElementImplemented(veChannelGroup)) { + if (!ExecuteViewElement(veChannelGroup)) { return; } @@ -530,7 +530,7 @@ void cDisplayChannelView::DisplayMessage(eMessageType Type, const char *Text) { } void cDisplayChannelView::DrawCustomTokens(void) { - if (!ViewElementImplemented(veCustomTokens)) { + if (!ExecuteViewElement(veCustomTokens)) { return; } if (!tmplView) @@ -541,7 +541,7 @@ void cDisplayChannelView::DrawCustomTokens(void) { } void cDisplayChannelView::DrawCurrentWeather(void) { - if (!ViewElementImplemented(veCurrentWeather)) { + if (!ExecuteViewElement(veCurrentWeather)) { return; } map < string, string > stringTokens; diff --git a/views/displaymenudetailview.c b/views/displaymenudetailview.c index 80caff7..f63f46c 100644 --- a/views/displaymenudetailview.c +++ b/views/displaymenudetailview.c @@ -805,7 +805,7 @@ void cDisplayMenuDetailView::DrawScrollbar(void) { } void cDisplayMenuDetailView::DrawTabLabels(void) { - if (!ViewElementImplemented(veTabLabels)) { + if (!ExecuteViewElement(veTabLabels)) { return; } map < string, string > labelStringTokens; diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c index 4caf2e5..2f40bc9 100644 --- a/views/displaymenurootview.c +++ b/views/displaymenurootview.c @@ -475,7 +475,7 @@ void cDisplayMenuRootView::DrawBackground(void) { DrawViewElement(veBackground, &stringTokens, &intTokens); } void cDisplayMenuRootView::DrawHeader(void) { - if (!ViewElementImplemented(veHeader)) { + if (!ExecuteViewElement(veHeader)) { return; } @@ -514,7 +514,7 @@ void cDisplayMenuRootView::DrawHeader(void) { } void cDisplayMenuRootView::DrawDateTime(void) { - if (!ViewElementImplemented(veDateTime)) { + if (!ExecuteViewElement(veDateTime)) { return; } @@ -530,7 +530,7 @@ void cDisplayMenuRootView::DrawDateTime(void) { } bool cDisplayMenuRootView::DrawTime(void) { - if (!ViewElementImplemented(veTime)) { + if (!ExecuteViewElement(veTime)) { return false; } @@ -548,7 +548,7 @@ bool cDisplayMenuRootView::DrawTime(void) { void cDisplayMenuRootView::DrawColorButtons(void) { - if (!ViewElementImplemented(veButtons)) { + if (!ExecuteViewElement(veButtons)) { return; } diff --git a/views/displaymenuview.c b/views/displaymenuview.c index 32a00ba..1921c95 100644 --- a/views/displaymenuview.c +++ b/views/displaymenuview.c @@ -24,7 +24,7 @@ cDisplayMenuView::~cDisplayMenuView() { } bool cDisplayMenuView::DrawBackground(void) { - if (!ViewElementImplemented(veBackground)) { + if (!ExecuteViewElement(veBackground)) { return false; } map < string, string > stringTokens; @@ -35,7 +35,7 @@ bool cDisplayMenuView::DrawBackground(void) { } bool cDisplayMenuView::DrawHeader(void) { - if (!ViewElementImplemented(veHeader)) { + if (!ExecuteViewElement(veHeader)) { return false; } @@ -73,7 +73,7 @@ bool cDisplayMenuView::DrawHeader(void) { } bool cDisplayMenuView::DrawDateTime(void) { - if (!ViewElementImplemented(veDateTime)) { + if (!ExecuteViewElement(veDateTime)) { return false; } @@ -90,7 +90,7 @@ bool cDisplayMenuView::DrawDateTime(void) { } bool cDisplayMenuView::DrawTime(void) { - if (!ViewElementImplemented(veTime)) { + if (!ExecuteViewElement(veTime)) { return false; } @@ -108,7 +108,7 @@ bool cDisplayMenuView::DrawTime(void) { } bool cDisplayMenuView::DrawColorButtons(void) { - if (!ViewElementImplemented(veButtons)) { + if (!ExecuteViewElement(veButtons)) { return false; } map < string, string > stringTokens; @@ -158,7 +158,7 @@ bool cDisplayMenuView::DrawColorButtons(void) { } bool cDisplayMenuView::DrawMessage(eMessageType type, const char *text) { - if (!ViewElementImplemented(veMessage)) { + if (!ExecuteViewElement(veMessage)) { return false; } if (!text) { @@ -180,7 +180,7 @@ bool cDisplayMenuView::DrawMessage(eMessageType type, const char *text) { } void cDisplayMenuView::DrawScrollbar(int numMax, int numDisplayed, int offset) { - if (!ViewElementImplemented(veScrollbar)) { + if (!ExecuteViewElement(veScrollbar)) { return; } map < string, string > stringTokens; @@ -204,7 +204,7 @@ void cDisplayMenuView::DrawScrollbar(int numMax, int numDisplayed, int offset) { } bool cDisplayMenuView::BackgroundImplemented(void) { - if (!ViewElementImplemented(veBackground)) { + if (!ExecuteViewElement(veBackground)) { return false; } return true; @@ -250,7 +250,7 @@ bool cDisplayMenuMainView::DrawDynamicViewElements(void) { } void cDisplayMenuMainView::DrawTimers(void) { - if (!ViewElementImplemented(veTimers)) { + if (!ExecuteViewElement(veTimers)) { return; } @@ -344,7 +344,7 @@ void cDisplayMenuMainView::DrawTimers(void) { } void cDisplayMenuMainView::DrawDiscUsage(void) { - if (!ViewElementImplemented(veDiscUsage)) { + if (!ExecuteViewElement(veDiscUsage)) { return; } @@ -369,7 +369,7 @@ void cDisplayMenuMainView::DrawDiscUsage(void) { } bool cDisplayMenuMainView::DrawLoad(void) { - if (!ViewElementImplemented(veSystemLoad)) { + if (!ExecuteViewElement(veSystemLoad)) { return false; } @@ -416,7 +416,7 @@ bool cDisplayMenuMainView::DrawLoad(void) { } void cDisplayMenuMainView::DrawTemperatures(void) { - if (!ViewElementImplemented(veTemperatures)) { + if (!ExecuteViewElement(veTemperatures)) { return; } cString execCommand = cString::sprintf("cd \"%s/\"; \"%s/temperatures\"", SCRIPTFOLDER, SCRIPTFOLDER); @@ -464,7 +464,7 @@ void cDisplayMenuMainView::DrawTemperatures(void) { } bool cDisplayMenuMainView::DrawDevices(void) { - if (!ViewElementImplemented(veDevices)) { + if (!ExecuteViewElement(veDevices)) { return false; } @@ -485,7 +485,7 @@ bool cDisplayMenuMainView::DrawDevices(void) { } void cDisplayMenuMainView::DrawCurrentSchedule(void) { - if (!ViewElementImplemented(veCurrentSchedule)) { + if (!ExecuteViewElement(veCurrentSchedule)) { return; } @@ -582,7 +582,7 @@ void cDisplayMenuMainView::DrawCurrentSchedule(void) { } void cDisplayMenuMainView::DrawCurrentWeather(void) { - if (!ViewElementImplemented(veCurrentWeather)) { + if (!ExecuteViewElement(veCurrentWeather)) { return; } map < string, string > stringTokens; @@ -597,7 +597,7 @@ void cDisplayMenuMainView::DrawCurrentWeather(void) { } void cDisplayMenuMainView::DrawCustomTokens(void) { - if (!ViewElementImplemented(veCustomTokens)) { + if (!ExecuteViewElement(veCustomTokens)) { return; } if (!tmplView) @@ -623,7 +623,7 @@ cDisplayMenuSchedulesView::~cDisplayMenuSchedulesView() { } bool cDisplayMenuSchedulesView::DrawHeader(void) { - if (!ViewElementImplemented(veHeader)) { + if (!ExecuteViewElement(veHeader)) { return false; } diff --git a/views/displaypluginview.c b/views/displaypluginview.c index f3471cb..21fd7b3 100644 --- a/views/displaypluginview.c +++ b/views/displaypluginview.c @@ -227,7 +227,7 @@ void cDisplayPluginView::DrawScrollbar(void) { } void cDisplayPluginView::DrawTabLabels(void) { - if (!ViewElementImplemented((eViewElement)pveTablabels)) { + if (!ExecuteViewElement((eViewElement)pveTablabels)) { return; } map < string, string > labelStringTokens; diff --git a/views/displayreplayview.c b/views/displayreplayview.c index dbd4cd3..cf68bf7 100644 --- a/views/displayreplayview.c +++ b/views/displayreplayview.c @@ -43,7 +43,7 @@ void cDisplayReplayView::DrawBackground(bool modeOnly) { } void cDisplayReplayView::DrawDate(void) { - if (!ViewElementImplemented(veDateTime)) { + if (!ExecuteViewElement(veDateTime)) { return; } @@ -59,7 +59,7 @@ void cDisplayReplayView::DrawDate(void) { } void cDisplayReplayView::DrawTime(void) { - if (!ViewElementImplemented(veTime)) { + if (!ExecuteViewElement(veTime)) { return; } @@ -137,7 +137,7 @@ void cDisplayReplayView::DrawScraperContent(const cRecording *recording) { if (!recording) return; - if (!ViewElementImplemented(veScraperContent)) { + if (!ExecuteViewElement(veScraperContent)) { return; } @@ -399,7 +399,7 @@ void cDisplayReplayView::DelayOnPause(void) { } void cDisplayReplayView::DrawCustomTokens(void) { - if (!ViewElementImplemented(veCustomTokens)) { + if (!ExecuteViewElement(veCustomTokens)) { return; } if (!tmplView) diff --git a/views/view.c b/views/view.c index 9e5a53a..6c4cb26 100644 --- a/views/view.c +++ b/views/view.c @@ -205,7 +205,10 @@ void cView::ActivateScrolling(void) { } } -bool cView::ViewElementImplemented(eViewElement ve) { +bool cView::ExecuteViewElement(eViewElement ve) { + bool doExecute = tmplView->ExecuteView(ve); + if (!doExecute) + return false; return tmplView->GetNumPixmapsViewElement(ve); } diff --git a/views/view.h b/views/view.h index 77ad318..3c19b83 100644 --- a/views/view.h +++ b/views/view.h @@ -42,7 +42,7 @@ protected: void DrawViewElement(eViewElement ve, map *stringTokens = NULL, map *intTokens = NULL, map < string, vector< map< string, string > > > *loopTokens = NULL); void ClearViewElement(eViewElement ve); void DestroyViewElement(eViewElement ve); - bool ViewElementImplemented(eViewElement ve); + bool ExecuteViewElement(eViewElement ve); bool ViewElementScrolls(eViewElement ve); void CreateViewPixmap(int num, cTemplatePixmap *pix, cRect *size = NULL); void CreateScrollingPixmap(int num, cTemplatePixmap *pix, cSize &drawportSize);