diff --git a/HISTORY b/HISTORY index bc869db..0fc94b4 100644 --- a/HISTORY +++ b/HISTORY @@ -67,9 +67,9 @@ Version 0.0.3 - fixed Bug that displaychannel was not shown after closing displaymenu with "backspace" (with active menuorg plugin) - fixed Bug with menuselection Patch -- added tokens {month}, {monthname} and {year} in displaymenutimers listitem and +- added tokens {month}, {monthname} and {year} in displaymenutimers listitem and currentitem -- added dedicated tokens for posters and banners in in +- added dedicated tokens for posters and banners in in displaychannel and displayreplay - added Plugin Interface - fixed crash when clearing a message in displaychannel and displayreplay @@ -81,7 +81,7 @@ Version 0.0.4 Version 0.0.5 -- added {channelnumber} and {channelname} Tokens in displaymenudetailepg +- added {channelnumber} and {channelname} Tokens in displaymenudetailepg detailheader - fixed {hasicon} Token in displaymenu header - added {newmails} Token in displaychannel statusinfo, mailbox plugin @@ -111,7 +111,7 @@ Version 0.0.8 Version 0.1.0 - fixed display of color buttons in detailed views -- fixed possible Nullpointer access in displaymenurootview +- fixed possible Nullpointer access in displaymenurootview - added currentschedule viewelement in displaymenumain - fixed bug that wrong channel was shown in header of whatson if entering from whatsonnow @@ -180,7 +180,7 @@ Version 0.1.6 adds its vakues and potentially overrides valués from globals.xml - check icons, menuicons and skinparts additionally directly in skin folder to allow default images which can be used for all skins -- fixed bug that setup variables are sometimes not identified in case two +- fixed bug that setup variables are sometimes not identified in case two or more skin names start identically Version 0.2.0 @@ -195,7 +195,7 @@ Version 0.2.1 - some more nopacity optimizations - thanx@utility - added possibiliy to use submenus in the skin setup menus - reloading active skin directly after closing setup menu so that - changes of setup parameters are immediately in use + changes of setup parameters are immediately in use Version 0.2.2 @@ -260,7 +260,7 @@ Version 0.3.3 no signal information will be fetched to improve performance. Version 0.3.4 - + - fixed backward compatibility to VDR version < 2.1.1 where cRecording::IsInUse() was introduced - automatically detect type of image if no file extension is available @@ -270,7 +270,7 @@ Version 0.4.0 - fixed bug that time was not correctly drawn if a submenu implements its own time display -- fixed bug that date was drawn every flush in displayreplay +- fixed bug that date was drawn every flush in displayreplay - fixed bug in metrixhd timers menu - fixed bug that datetime was not correctly drawn if a submenu implements its own datetime display @@ -290,7 +290,7 @@ Version 0.4.2 - fixed bug that string tokens are not evaluated in area conditions - added possibility to draw a debug grid in views - added more info if debugImage is activted in config -- added possibility for blinking images, texts, rectangles, ellipses +- added possibility for blinking images, texts, rectangles, ellipses and slopes - adapted libskindesignerapi makefile for LCLBLD @@ -376,7 +376,7 @@ Version 0.5.3 - added SVG Template parsing - fixed memory leak when creating fonts - fixed crash using animated images in plugins -- added banner to displaymenuschedulescurrentview and +- added banner to displaymenuschedulescurrentview and displaymenureplaycurrentview - immplemented areacontainers to group areas - fixed bug displaying pixmaps with transparency @@ -406,10 +406,10 @@ Version 0.6.2 Version 0.6.3 - implemented horizontal menus - For displaying horizontal menus with VDR <= 2.2.x a VDR - patch is required (see /patches/vdr-2.2.0_horizontal_menu.patch - in the plugin source directory). Without this patch the keys - left/right and up/down are not toggled in horizontal menus. + For displaying horizontal menus with VDR <= 2.2.x a VDR + patch is required (see /patches/vdr-2.2.0_horizontal_menu.patch + in the plugin source directory). Without this patch the keys + left/right and up/down are not toggled in horizontal menus. With VDR >= 2.3.1 this patch is not needed anymore. - added possibility to add conditions to elements - added possibility to define a viewelement several times with @@ -418,7 +418,7 @@ Version 0.6.3 - added "valign" option in . If the box height is set and the text does not need the complete height, with valign="center" the text can be placed horizontally centered inside the box borders. -- implemented optional horizontal main-, recordings- and +- implemented optional horizontal main-, recordings- and weatherforecast menu in metrixhd Version 0.7.0 @@ -431,3 +431,7 @@ Version 0.7.1 - added possibility to define help texts for skin setup parameters Version 0.7.2 + +Version 1.2.4 (horchi) + +- added compatibility to vdr 2.3.8 diff --git a/coreengine/complextypes.c b/coreengine/complextypes.c index 3f8773a..2574208 100644 --- a/coreengine/complextypes.c +++ b/coreengine/complextypes.c @@ -83,13 +83,13 @@ cCond::cCond(const cCond &other) { compareStrValue = strdup(other.compareStrValue); } -cCond::~cCond(void) { - free(expr); +cCond::~cCond(void) { + free(expr); free(compareStrValue); } void cCond::Debug(void) { - esyslog("skindesigner: cond %s, operation %s, type %d", expr, + esyslog("skindesigner: cond %s, operation %s, type %d", expr, (operation == eCondOp::tAnd) ? "++" : "||", (int)type); if (constant) @@ -138,15 +138,15 @@ bool cCondition::True(void) { for (cCond *c = conds.First(); c; c = conds.Next(c)) { bool condTrue = true; //evaluate condition - if (c->constant) + if (c->constant) { condTrue = c->isTrue; - } - else if (c->type == eCondType::token) + } + else if (c->type == eCondType::token) { if (c->tokenType == eCondTokenType::inttoken) { int tokenVal = tokenContainer->IntToken(c->tokenIndex); - condTrue = (tokenVal > 0) ? true : false; + condTrue = (tokenVal > 0) ? true : false; } else if (c->tokenType == eCondTokenType::stringtoken) { char *tokenVal = tokenContainer->StringToken(c->tokenIndex); if (tokenVal) @@ -159,8 +159,8 @@ bool cCondition::True(void) { } } - } - else if (c->type == eCondType::negtoken) + } + else if (c->type == eCondType::negtoken) { if (c->tokenType == eCondTokenType::inttoken) { int tokenVal = tokenContainer->IntToken(c->tokenIndex); @@ -177,7 +177,7 @@ bool cCondition::True(void) { } } } - else if (c->type == eCondType::lowerInt || c->type == eCondType::equalInt || c->type == eCondType::notequalInt || c->type == eCondType::greaterInt) + else if (c->type == eCondType::lowerInt || c->type == eCondType::equalInt || c->type == eCondType::notequalInt || c->type == eCondType::greaterInt) { if (c->tokenType == eCondTokenType::inttoken) { int tokenVal = tokenContainer->IntToken(c->tokenIndex); @@ -219,7 +219,7 @@ bool cCondition::True(void) { } } } - else if (c->type == eCondType::isset || c->type == eCondType::empty) + else if (c->type == eCondType::isset || c->type == eCondType::empty) { if (c->tokenType == eCondTokenType::stringtoken) { char *tokenVal = tokenContainer->StringToken(c->tokenIndex); @@ -251,7 +251,7 @@ bool cCondition::True(void) { } } } - else if (c->type == eCondType::equalString || c->type == eCondType::notEqualString || c->type == eCondType::contains || c->type == eCondType::notContains) + else if (c->type == eCondType::equalString || c->type == eCondType::notEqualString || c->type == eCondType::contains || c->type == eCondType::notContains) { if (c->tokenType == eCondTokenType::stringtoken) { char *tokenVal = tokenContainer->StringToken(c->tokenIndex); @@ -284,7 +284,7 @@ bool cCondition::True(void) { if (c->operation == eCondOp::tAnd) { ok = ok && condTrue; } else if (c->operation == eCondOp::tOr) { - ok = ok || condTrue; + ok = ok || condTrue; } } return ok; @@ -470,8 +470,8 @@ void cCondition::SetTokenIndex(cCond *c, const char *token) { /****************************************************************** * cSummand ******************************************************************/ -cSummand::cSummand(const char *summand) { - this->summand = strdup(summand); +cSummand::cSummand(const char *summand) { + this->summand = strdup(summand); } cSummand::cSummand(const cSummand &other) { @@ -485,7 +485,7 @@ cSummand::cSummand(const cSummand &other) { } cSummand::~cSummand(void) { - free(summand); + free(summand); } void cSummand::Debug(void) { @@ -564,7 +564,7 @@ bool cNumericExpr::CacheStatic(void) { value = atoi(expr); return true; } - + //check if expression is a percent expression if (PercentValue(expr)) { return true; @@ -676,7 +676,7 @@ int cNumericExpr::Calculate(void) { if (f->multiplication) factor *= fac; else if (fac) - factor /= fac; + factor /= fac; } if (s->positive) result += factor; @@ -722,7 +722,7 @@ bool cNumericExpr::IsNumericExpression(const char *e) { else return false; } - return true; + return true; } bool cNumericExpr::PercentValue(const char *e) { @@ -762,7 +762,7 @@ char *cNumericExpr::ReplacePercentValue(char *e) { if (horizontal) { sprintf(replacement, "%.5f*{areawidth}", percentVal); } else { - sprintf(replacement, "%.5f*{areaheight}", percentVal); + sprintf(replacement, "%.5f*{areaheight}", percentVal); } int len = strlen(replacement) + 1; @@ -888,7 +888,7 @@ void cNumericExpr::CreateFactors(void) { f->constValue = EvaluateExpressionDouble(sum); s->factors.Add(f); free(sum); - continue; + continue; } bool multiplication = true; char *fac = strtok(sum, delimiterFac); @@ -906,7 +906,7 @@ void cNumericExpr::CreateFactors(void) { } else if (SetReferenceFactor(f, fac)) { f->multiplication = multiplication; s->factors.Add(f); - } else if (SetGeometryFactor(f, fac)) { + } else if (SetGeometryFactor(f, fac)) { f->multiplication = multiplication; s->factors.Add(f); } else { @@ -961,7 +961,7 @@ bool cNumericExpr::SetReferenceFactor(cFactor *f, char *tokenName) { f->type = eFactorType::widthref; } else if (startswith(tokenName, "{height(") && endswith(tokenName, ")}")) { start = 8; - f->type = eFactorType::heightref; + f->type = eFactorType::heightref; } if (start == 0) @@ -986,7 +986,7 @@ bool cNumericExpr::SetGeometryFactor(cFactor *f, char *tokenName) { f->type = eFactorType::columnwidth; ok = true; } else if (!strcmp(tokenName, "{rowheight}")) { - f->type = eFactorType::rowheight; + f->type = eFactorType::rowheight; ok = true; } return ok; @@ -1007,7 +1007,7 @@ void cNumericExpr::ConsolidateSummand(void) { s = constSummand; } } - } + } } void cNumericExpr::ConsolidateFactors(void) { @@ -1020,7 +1020,7 @@ void cNumericExpr::ConsolidateFactors(void) { } else { if (f->multiplication) constFactor->constValue *= f->constValue; - else + else constFactor->constValue /= f->constValue; s->factors.Del(f); f = constFactor; @@ -1042,7 +1042,7 @@ cColor::cColor(const char *expression) { cColor::cColor(const cColor &other) { globals = other.globals; expr = strdup(other.expr); - value = other.value; + value = other.value; } cColor::~cColor(void) { @@ -1442,7 +1442,7 @@ bool cTextExpr::ParsePrintfToken(cTextToken *t) { strncpy(buffer, startExpr+1, expLen); buffer[expLen] = '\0'; t->printfExpr = strdup(buffer); - + //find variables char *startVar = strchr(t->constValue, ','); if (!startVar) @@ -1525,7 +1525,7 @@ void cTextExpr::DeterminatePrintfToken(cTextToken *t) { } } else if (t->printfVarIndices[i].type == ePrintfVarType::looptoken && loopInfo && loopInfo->row >= 0) { if (tokenContainer->LoopToken(loopInfo->index, loopInfo->row, t->printfVarIndices[i].index)) { - results.push_back(atoi(tokenContainer->LoopToken(loopInfo->index, loopInfo->row, t->printfVarIndices[i].index))); + results.push_back(atoi(tokenContainer->LoopToken(loopInfo->index, loopInfo->row, t->printfVarIndices[i].index))); } } } @@ -1611,8 +1611,8 @@ char *cTextExpr::CopyTextPart(char *start, char *stop, bool incLastChar) { } else { //search end of text char *p = start; - while (*p) - len++; p++; + while (*p) { + len++; p++; } len++; } val = (char*)malloc(len+1); diff --git a/displaymenu.c b/displaymenu.c index b105c21..6634b92 100644 --- a/displaymenu.c +++ b/displaymenu.c @@ -69,7 +69,7 @@ void cSDDisplayMenu::SetMessage(eMessageType Type, const char *Text) { view->SetMessage(Type, Text); } -bool cSDDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) { +bool cSDDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch, bool TimerActive) { if (!view) return false; if (Index == 0) { diff --git a/displaymenu.h b/displaymenu.h index 94fcd2f..c978736 100644 --- a/displaymenu.h +++ b/displaymenu.h @@ -23,7 +23,8 @@ public: virtual void SetTitle(const char *Title); virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL); virtual void SetMessage(eMessageType Type, const char *Text); - virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch); + virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch, bool TimerActive); + virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) { return SetItemEvent(Event, Index, Current, Selectable, Channel, WithDate, TimerMatch, true); } virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable); virtual bool SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider); virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New); diff --git a/skindesigner.c b/skindesigner.c index bc09f31..ef0dc1f 100644 --- a/skindesigner.c +++ b/skindesigner.c @@ -20,7 +20,7 @@ #endif -static const char *VERSION = "1.2.3"; +static const char *VERSION = "1.2.4"; static const char *DESCRIPTION = trNOOP("Skin Designer"); class cPluginSkinDesigner : public cPlugin, public skindesignerapi::SkindesignerAPI { @@ -114,7 +114,7 @@ bool cPluginSkinDesigner::Start(void) { cImageImporterSVG::InitLibRSVG(); cGlobalTimers::StartRefreshThread(); bool trueColorAvailable = true; - + if (!cOsdProvider::SupportsTrueColor()) { esyslog("skindesigner: No TrueColor OSD found! Using default Skin LCARS!"); trueColorAvailable = false; @@ -221,7 +221,7 @@ const char **cPluginSkinDesigner::SVDRPHelpPages(void) { } cString cPluginSkinDesigner::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) { - + cSkinDesigner *activeSkin = NULL; cSkinDesigner *availableSkin = NULL; config.InitSkinRefsIterator();