From 6872e29fe6d628acd95a5f5eded6f372102fea31 Mon Sep 17 00:00:00 2001 From: louis Date: Sat, 11 Apr 2015 16:21:33 +0200 Subject: [PATCH] added possibility to draw a debug grid in views --- HISTORY | 1 + displaychannel.c | 1 + displaymenu.c | 1 + displaymessage.c | 1 + displayplugin.c | 1 + displayreplay.c | 1 + displaytracks.c | 1 + displayvolume.c | 1 + dtd/displayaudiotracks.dtd | 1 + dtd/displaychannel.dtd | 1 + dtd/displaymenu.dtd | 11 +++++++ dtd/displaymenuplugin.dtd | 1 + dtd/displaymessage.dtd | 1 + dtd/displayplugin.dtd | 1 + dtd/displayreplay.dtd | 1 + dtd/displayvolume.dtd | 1 + libtemplate/templatefunction.c | 25 +++++++++++++++ libtemplate/templatefunction.h | 4 +++ libtemplate/templateview.c | 55 ++++++++++++++++++++++++++++++++- libtemplate/templateview.h | 5 +++ views/displaymenurootview.c | 1 + views/view.c | 56 +++++++++++++++++++++++++++++++++- views/view.h | 2 ++ 23 files changed, 172 insertions(+), 2 deletions(-) diff --git a/HISTORY b/HISTORY index c286b99..2c70939 100644 --- a/HISTORY +++ b/HISTORY @@ -288,4 +288,5 @@ Version 0.4.2 - fixed bug that datetime was not drawn correctly in menus - fixed bug that string tokens are not evaluated in area conditions +- added possibility to draw a debug grid in views diff --git a/displaychannel.c b/displaychannel.c index 711f05a..603e80e 100644 --- a/displaychannel.c +++ b/displaychannel.c @@ -22,6 +22,7 @@ cSDDisplayChannel::cSDDisplayChannel(cTemplate *channelTemplate, bool WithInfo) doOutput = false; return; } + channelView->DrawDebugGrid(); } cSDDisplayChannel::~cSDDisplayChannel() { diff --git a/displaymenu.c b/displaymenu.c index 51b6d30..b38ab7a 100644 --- a/displaymenu.c +++ b/displaymenu.c @@ -21,6 +21,7 @@ cSDDisplayMenu::cSDDisplayMenu(cTemplate *menuTemplate) { return; } SetCurrentRecording(); + rootView->DrawDebugGrid(); } cSDDisplayMenu::~cSDDisplayMenu() { diff --git a/displaymessage.c b/displaymessage.c index 94c1bdd..c125fd3 100644 --- a/displaymessage.c +++ b/displaymessage.c @@ -14,6 +14,7 @@ cSDDisplayMessage::cSDDisplayMessage(cTemplate *messageTemplate) { doOutput = false; return; } + messageView->DrawDebugGrid(); messageView->DrawBackground(); } diff --git a/displayplugin.c b/displayplugin.c index 28085a9..35e92e7 100644 --- a/displayplugin.c +++ b/displayplugin.c @@ -23,6 +23,7 @@ cSkinDisplayPlugin::cSkinDisplayPlugin(cTemplate *pluginTemplate, int subViewID) doOutput = false; return; } + pluginView->DrawDebugGrid(); } cSkinDisplayPlugin::~cSkinDisplayPlugin(void) { diff --git a/displayreplay.c b/displayreplay.c index 4080407..9a68761 100644 --- a/displayreplay.c +++ b/displayreplay.c @@ -17,6 +17,7 @@ cSDDisplayReplay::cSDDisplayReplay(cTemplate *replayTemplate, bool ModeOnly) { doOutput = false; return; } + replayView->DrawDebugGrid(); } cSDDisplayReplay::~cSDDisplayReplay() { diff --git a/displaytracks.c b/displaytracks.c index 8e28095..184163d 100644 --- a/displaytracks.c +++ b/displaytracks.c @@ -18,6 +18,7 @@ cSDDisplayTracks::cSDDisplayTracks(cTemplate *audiotracksTemplate, const char *T doOutput = false; return; } + tracksView->DrawDebugGrid(); tracksView->DrawBackground(); cDisplayMenuListView *list = tracksView->GetListView(); diff --git a/displayvolume.c b/displayvolume.c index 9ee28a5..d50e470 100644 --- a/displayvolume.c +++ b/displayvolume.c @@ -16,6 +16,7 @@ cSDDisplayVolume::cSDDisplayVolume(cTemplate *volumeTemplate) { if (!volumeView->createOsd()) { doOutput = false; } else { + volumeView->DrawDebugGrid(); volumeView->DrawBackground(); } } diff --git a/dtd/displayaudiotracks.dtd b/dtd/displayaudiotracks.dtd index 31e9802..3d54644 100644 --- a/dtd/displayaudiotracks.dtd +++ b/dtd/displayaudiotracks.dtd @@ -13,6 +13,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/dtd/displaychannel.dtd b/dtd/displaychannel.dtd index a98129c..baea223 100644 --- a/dtd/displaychannel.dtd +++ b/dtd/displaychannel.dtd @@ -16,6 +16,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/dtd/displaymenu.dtd b/dtd/displaymenu.dtd index 081caa2..de4a813 100644 --- a/dtd/displaymenu.dtd +++ b/dtd/displaymenu.dtd @@ -13,6 +13,7 @@ width CDATA #REQUIRED height CDATA #REQUIRED fadetime CDATA #IMPLIED + debuggrid CDATA #IMPLIED > @@ -177,6 +178,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > @@ -205,6 +208,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > @@ -218,6 +222,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > @@ -231,6 +236,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > @@ -244,6 +250,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > @@ -257,6 +264,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/dtd/displaymenuplugin.dtd b/dtd/displaymenuplugin.dtd index bcd005c..d7352c6 100644 --- a/dtd/displaymenuplugin.dtd +++ b/dtd/displaymenuplugin.dtd @@ -13,6 +13,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/dtd/displaymessage.dtd b/dtd/displaymessage.dtd index 223ea2d..b9849bd 100644 --- a/dtd/displaymessage.dtd +++ b/dtd/displaymessage.dtd @@ -13,6 +13,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/dtd/displayplugin.dtd b/dtd/displayplugin.dtd index 71e3d2b..8bc0c47 100644 --- a/dtd/displayplugin.dtd +++ b/dtd/displayplugin.dtd @@ -14,6 +14,7 @@ scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED hideroot CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/dtd/displayreplay.dtd b/dtd/displayreplay.dtd index 217df11..d5f7ff8 100644 --- a/dtd/displayreplay.dtd +++ b/dtd/displayreplay.dtd @@ -17,6 +17,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/dtd/displayvolume.dtd b/dtd/displayvolume.dtd index 2be597d..278346f 100644 --- a/dtd/displayvolume.dtd +++ b/dtd/displayvolume.dtd @@ -13,6 +13,7 @@ scaletvy CDATA #IMPLIED scaletvwidth CDATA #IMPLIED scaletvheight CDATA #IMPLIED + debuggrid CDATA #IMPLIED > diff --git a/libtemplate/templatefunction.c b/libtemplate/templatefunction.c index 2e6a743..7b76539 100644 --- a/libtemplate/templatefunction.c +++ b/libtemplate/templatefunction.c @@ -49,6 +49,10 @@ void cTemplateFunction::SetParameters(vector > params) { debug = true; } continue; + } else if (!name.compare("debuggrid")) { + string value = it->second; + SetDebugGrid(value); + continue; } else if (!name.compare("condition")) { p.first = ptCond; } else if (!name.compare("name")) { @@ -429,6 +433,8 @@ int cTemplateFunction::GetNumericParameter(eParamType type) { return 0; else if (type == ptBackground) return 0; + else if (type == ptDrawDebugGrid) + return 0; else if (type == ptDirection) return diBottomUp; return -1; @@ -1119,6 +1125,25 @@ bool cTemplateFunction::SetDirection(string value) { return true; } +void cTemplateFunction::SetDebugGrid(string value) { + int numGridsX = 0; + int numGridsY = 0; + size_t posSep = value.find("x"); + if (posSep != string::npos) { + string x = value.substr(0, posSep); + string y = value.substr(posSep+1); + numGridsX = atoi(x.c_str()); + numGridsY = atoi(y.c_str()); + } + if (numGridsX < 1) + numGridsX = 10; + if (numGridsY < 1) + numGridsY = 10; + numericParameters.insert(pair(ptDebugGridX, numGridsX)); + numericParameters.insert(pair(ptDebugGridY, numGridsY)); + numericParameters.insert(pair(ptDrawDebugGrid, 1)); +} + void cTemplateFunction::ParseStringParameters(void) { //first replace stringtokens in Text (drawText) stringstream text; diff --git a/libtemplate/templatefunction.h b/libtemplate/templatefunction.h index fa2e86a..fdc66b0 100644 --- a/libtemplate/templatefunction.h +++ b/libtemplate/templatefunction.h @@ -41,6 +41,9 @@ enum eParamType { ptCond, ptName, ptMode, + ptDrawDebugGrid, + ptDebugGridX, + ptDebugGridY, ptX, ptY, ptWidth, @@ -165,6 +168,7 @@ protected: bool SetDetached(string value); bool SetBackground(string value); bool SetDirection(string value); + void SetDebugGrid(string value); void ParseStringParameters(void); void ParseNumericalParameters(void); void CalculateAlign(int elementWidth, int elementHeight); diff --git a/libtemplate/templateview.c b/libtemplate/templateview.c index 5af8229..b7a4110 100644 --- a/libtemplate/templateview.c +++ b/libtemplate/templateview.c @@ -212,6 +212,41 @@ bool cTemplateView::HideView(void) { return parameters->GetNumericParameter(ptHideRoot); } +bool cTemplateView::DrawGebugGrid(void) { + if (!parameters) + return false; + return parameters->GetNumericParameter(ptDrawDebugGrid); +} + +int cTemplateView::DebugGridX(void) { + if (!parameters) + return 0; + return parameters->GetNumericParameter(ptDebugGridX); +} + +int cTemplateView::DebugGridY(void) { + if (!parameters) + return 0; + return parameters->GetNumericParameter(ptDebugGridY); +} + +tColor cTemplateView::DebugGridColor(void) { + tColor col = 0xFFFF0000; + if (!globals) + return col; + string colName = "{clrDebugGrid}"; + globals->GetColor(colName, col); + return col; +} + +tColor cTemplateView::DebugGridFontColor(void) { + tColor col = 0xFFFF0000; + if (!globals) + return col; + string colName = "{clrFontDebugGrid}"; + globals->GetColor(colName, col); + return col; +} bool cTemplateView::ExecuteView(eViewElement ve) { map < eViewElement, cTemplateViewElement* >::iterator hit = viewElements.find(ve); @@ -829,6 +864,7 @@ cTemplateViewChannel::cTemplateViewChannel(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(viewName, attributes)); SetViewElements(); @@ -995,6 +1031,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("width"); attributes.insert("height"); attributes.insert("fadetime"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(viewName, attributes)); string subViewName = "menudefault"; @@ -1008,7 +1045,8 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvx"); attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); - attributes.insert("scaletvheight"); + attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menumain"; @@ -1023,6 +1061,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menusetup"; @@ -1037,6 +1076,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menuschedules"; @@ -1051,6 +1091,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menuchannels"; @@ -1065,6 +1106,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menutimers"; @@ -1079,6 +1121,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menurecordings"; @@ -1093,6 +1136,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menudetailedepg"; @@ -1107,6 +1151,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menudetailedrecording"; @@ -1121,6 +1166,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); subViewName = "menudetailedtext"; @@ -1135,6 +1181,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(subViewName, attributes)); //definition of allowed parameters for menuitems viewlist @@ -1182,6 +1229,7 @@ cTemplateViewMenu::cTemplateViewMenu(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >("menuplugin", attributes)); SetSubViews(); @@ -1516,6 +1564,7 @@ cTemplateViewMessage::cTemplateViewMessage(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(viewName, attributes)); SetViewElements(); @@ -1590,6 +1639,7 @@ cTemplateViewReplay::cTemplateViewReplay(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(viewName, attributes)); //definition of allowed parameters for onpause and onpausemodeonly viewelement @@ -1772,6 +1822,7 @@ cTemplateViewVolume::cTemplateViewVolume(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(viewName, attributes)); SetViewElements(); @@ -1846,6 +1897,7 @@ cTemplateViewAudioTracks::cTemplateViewAudioTracks(void) { attributes.insert("scaletvy"); attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(viewName, attributes)); //definition of allowed parameters for menuitems viewlist @@ -1968,6 +2020,7 @@ cTemplateViewPlugin::cTemplateViewPlugin(string pluginName, int viewID) { attributes.insert("scaletvwidth"); attributes.insert("scaletvheight"); attributes.insert("hideroot"); + attributes.insert("debuggrid"); funcsAllowed.insert(pair< string, set >(viewName, attributes)); //definition of allowed parameters for viewtab diff --git a/libtemplate/templateview.h b/libtemplate/templateview.h index b1fd17d..64add2a 100644 --- a/libtemplate/templateview.h +++ b/libtemplate/templateview.h @@ -112,6 +112,11 @@ public: cRect GetOsdSize(void); int GetNumPixmaps(void); int GetNumPixmapsViewElement(eViewElement ve); + bool DrawGebugGrid(void); + int DebugGridX(void); + int DebugGridY(void); + tColor DebugGridColor(void); + tColor DebugGridFontColor(void); bool HideView(void); bool ExecuteView(eViewElement ve); bool DetachViewElement(eViewElement ve); diff --git a/views/displaymenurootview.c b/views/displaymenurootview.c index 7b514d7..a29f56d 100644 --- a/views/displaymenurootview.c +++ b/views/displaymenurootview.c @@ -422,6 +422,7 @@ cFont *cDisplayMenuRootView::GetTextAreaFont(void) { void cDisplayMenuRootView::Render(void) { if (!view) return; + view->DrawDebugGrid(); if (!view->DrawBackground()) { defaultBackgroundDrawn = true; DrawBackground(); diff --git a/views/view.c b/views/view.c index 09bae74..1680379 100644 --- a/views/view.c +++ b/views/view.c @@ -5,7 +5,7 @@ using namespace std; -cView::cView(cTemplateView *tmplView) : cPixmapContainer(tmplView->GetNumPixmaps()) { +cView::cView(cTemplateView *tmplView) : cPixmapContainer(tmplView->DrawGebugGrid() ? tmplView->GetNumPixmaps() + 1 : tmplView->GetNumPixmaps()) { this->tmplView = tmplView; tvScaled = tmplView->GetScalingWindow(scalingWindow); if (tvScaled) { @@ -42,6 +42,12 @@ cView::~cView() { } } +void cView::DrawDebugGrid(void) { + if (tmplView && tmplView->DrawGebugGrid()) { + DoDrawDebugGrid(); + } +} + void cView::Init(void) { viewInit = true; scrolling = false; @@ -483,6 +489,54 @@ void cView::DebugTokens(string viewElement, map *stringTokens, ma * Private Functions *****************************************************************/ +void cView::DoDrawDebugGrid(void) { + int stepsX = tmplView->DebugGridX(); + int stepsY = tmplView->DebugGridY(); + cRect osdSize = tmplView->GetOsdSize(); + tColor col = tmplView->DebugGridColor(); + tColor colFont = tmplView->DebugGridFontColor(); + + cRect size(0, 0, osdSize.Width(), osdSize.Height()); + //use last pixmap as grid pixmap + int numGridPixmap = NumPixmaps() - 1; + CreatePixmap(numGridPixmap, 7, size); + + int width = size.Width(); + int height = size.Height(); + float stepWidthX = (double)width / (double)stepsX; + float stepWidthY = (double)height / (double)stepsY; + int fontSize = height / stepsY / 5; + + for (int i = 0; i <= stepsX; i++) { + int x = (float)i * stepWidthX; + if (i==stepsX) + x = x-1; + cRect line(x, 0, 1, height); + DrawRectangle(numGridPixmap, line, col); + if (i==stepsX) + continue; + float percent = (float)i / (float)stepsX * 100.0; + cPoint textPosPerc(x+2, 2); + cPoint textPosAbs(x+2, fontSize + 4); + DrawText(numGridPixmap, textPosPerc, *cString::sprintf("%.1f%%", percent), colFont, 0x00000000, "vdrOsd", fontSize); + DrawText(numGridPixmap, textPosAbs, *cString::sprintf("%dpx", x), colFont, 0x00000000, "vdrOsd", fontSize); + } + for (int i = 0; i <= stepsY; i++) { + int y = (float)i * stepWidthY; + if (i==stepsY) + y = y-1; + cRect line(0, y, width, 1); + DrawRectangle(numGridPixmap, line, col); + if (i==0 || i==stepsY) + continue; + float percent = (float)i / (float)stepsY * 100.0; + cPoint textPosPerc(2, y + 2); + cPoint textPosAbs(2, y + fontSize + 4); + DrawText(numGridPixmap, textPosPerc, *cString::sprintf("%.1f%%", percent), colFont, 0x00000000, "vdrOsd", fontSize); + DrawText(numGridPixmap, textPosAbs, *cString::sprintf("%dpx", y), colFont, 0x00000000, "vdrOsd", fontSize); + } +} + void cView::DoFill(int num, cTemplateFunction *func) { tColor col = func->GetColorParameter(ptColor); Fill(num, col); diff --git a/views/view.h b/views/view.h index f81885f..e6ee909 100644 --- a/views/view.h +++ b/views/view.h @@ -13,6 +13,7 @@ class cViewElement; class cView : public cPixmapContainer { private: void Init(void); + void DoDrawDebugGrid(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); @@ -61,6 +62,7 @@ public: cView(cTemplateView *tmplView); cView(cTemplateViewElement *tmplViewElement); cView(cTemplateViewTab *tmplTab); + void DrawDebugGrid(void); virtual ~cView(); virtual void Stop(void); };