compatibility to vdr 2.3.8

This commit is contained in:
horchi 2018-02-16 18:12:48 +01:00
parent c8d54dbe25
commit beeb82bbda
5 changed files with 56 additions and 51 deletions

34
HISTORY
View File

@ -67,9 +67,9 @@ Version 0.0.3
- fixed Bug that displaychannel was not shown after closing displaymenu with - fixed Bug that displaychannel was not shown after closing displaymenu with
"backspace" (with active menuorg plugin) "backspace" (with active menuorg plugin)
- fixed Bug with menuselection Patch - 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 currentitem
- added dedicated tokens for posters and banners in <srapercontent> in - added dedicated tokens for posters and banners in <srapercontent> in
displaychannel and displayreplay displaychannel and displayreplay
- added Plugin Interface - added Plugin Interface
- fixed crash when clearing a message in displaychannel and displayreplay - fixed crash when clearing a message in displaychannel and displayreplay
@ -81,7 +81,7 @@ Version 0.0.4
Version 0.0.5 Version 0.0.5
- added {channelnumber} and {channelname} Tokens in displaymenudetailepg - added {channelnumber} and {channelname} Tokens in displaymenudetailepg
detailheader detailheader
- fixed {hasicon} Token in displaymenu header - fixed {hasicon} Token in displaymenu header
- added {newmails} Token in displaychannel statusinfo, mailbox plugin - added {newmails} Token in displaychannel statusinfo, mailbox plugin
@ -111,7 +111,7 @@ Version 0.0.8
Version 0.1.0 Version 0.1.0
- fixed display of color buttons in detailed views - 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 - added currentschedule viewelement in displaymenumain
- fixed bug that wrong channel was shown in header of whatson - fixed bug that wrong channel was shown in header of whatson
if entering from whatsonnow if entering from whatsonnow
@ -180,7 +180,7 @@ Version 0.1.6
adds its vakues and potentially overrides valués from globals.xml adds its vakues and potentially overrides valués from globals.xml
- check icons, menuicons and skinparts additionally directly in skin folder - check icons, menuicons and skinparts additionally directly in skin folder
to allow default images which can be used for all skins 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 or more skin names start identically
Version 0.2.0 Version 0.2.0
@ -195,7 +195,7 @@ Version 0.2.1
- some more nopacity optimizations - thanx@utility - some more nopacity optimizations - thanx@utility
- added possibiliy to use submenus in the skin setup menus - added possibiliy to use submenus in the skin setup menus
- reloading active skin directly after closing setup menu so that - 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 Version 0.2.2
@ -260,7 +260,7 @@ Version 0.3.3
no signal information will be fetched to improve performance. no signal information will be fetched to improve performance.
Version 0.3.4 Version 0.3.4
- fixed backward compatibility to VDR version < 2.1.1 where - fixed backward compatibility to VDR version < 2.1.1 where
cRecording::IsInUse() was introduced cRecording::IsInUse() was introduced
- automatically detect type of image if no file extension is available - 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 - fixed bug that time was not correctly drawn if a submenu implements
its own time display 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 in metrixhd timers menu
- fixed bug that datetime was not correctly drawn if a submenu implements - fixed bug that datetime was not correctly drawn if a submenu implements
its own datetime display its own datetime display
@ -290,7 +290,7 @@ Version 0.4.2
- fixed bug that string tokens are not evaluated in area conditions - fixed bug that string tokens are not evaluated in area conditions
- added possibility to draw a debug grid in views - added possibility to draw a debug grid in views
- added more info if debugImage is activted in config - 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 and slopes
- adapted libskindesignerapi makefile for LCLBLD - adapted libskindesignerapi makefile for LCLBLD
@ -376,7 +376,7 @@ Version 0.5.3
- added SVG Template parsing - added SVG Template parsing
- fixed memory leak when creating fonts - fixed memory leak when creating fonts
- fixed crash using animated images in plugins - fixed crash using animated images in plugins
- added banner to displaymenuschedulescurrentview and - added banner to displaymenuschedulescurrentview and
displaymenureplaycurrentview displaymenureplaycurrentview
- immplemented areacontainers to group areas - immplemented areacontainers to group areas
- fixed bug displaying pixmaps with transparency - fixed bug displaying pixmaps with transparency
@ -406,10 +406,10 @@ Version 0.6.2
Version 0.6.3 Version 0.6.3
- implemented horizontal menus - implemented horizontal menus
For displaying horizontal menus with VDR <= 2.2.x a VDR For displaying horizontal menus with VDR <= 2.2.x a VDR
patch is required (see /patches/vdr-2.2.0_horizontal_menu.patch patch is required (see /patches/vdr-2.2.0_horizontal_menu.patch
in the plugin source directory). Without this patch the keys in the plugin source directory). Without this patch the keys
left/right and up/down are not toggled in horizontal menus. left/right and up/down are not toggled in horizontal menus.
With VDR >= 2.3.1 this patch is not needed anymore. With VDR >= 2.3.1 this patch is not needed anymore.
- added possibility to add conditions to <menuitems> elements - added possibility to add conditions to <menuitems> elements
- added possibility to define a viewelement several times with - added possibility to define a viewelement several times with
@ -418,7 +418,7 @@ Version 0.6.3
- added "valign" option in <drawtextbox>. If the box height is set - added "valign" option in <drawtextbox>. If the box height is set
and the text does not need the complete height, with valign="center" and the text does not need the complete height, with valign="center"
the text can be placed horizontally centered inside the box borders. 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 weatherforecast menu in metrixhd
Version 0.7.0 Version 0.7.0
@ -431,3 +431,7 @@ Version 0.7.1
- added possibility to define help texts for skin setup parameters - added possibility to define help texts for skin setup parameters
Version 0.7.2 Version 0.7.2
Version 1.2.4 (horchi)
- added compatibility to vdr 2.3.8

View File

@ -83,13 +83,13 @@ cCond::cCond(const cCond &other) {
compareStrValue = strdup(other.compareStrValue); compareStrValue = strdup(other.compareStrValue);
} }
cCond::~cCond(void) { cCond::~cCond(void) {
free(expr); free(expr);
free(compareStrValue); free(compareStrValue);
} }
void cCond::Debug(void) { 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) ? "++" : "||", (operation == eCondOp::tAnd) ? "++" : "||",
(int)type); (int)type);
if (constant) if (constant)
@ -138,15 +138,15 @@ bool cCondition::True(void) {
for (cCond *c = conds.First(); c; c = conds.Next(c)) { for (cCond *c = conds.First(); c; c = conds.Next(c)) {
bool condTrue = true; bool condTrue = true;
//evaluate condition //evaluate condition
if (c->constant) if (c->constant)
{ {
condTrue = c->isTrue; condTrue = c->isTrue;
} }
else if (c->type == eCondType::token) else if (c->type == eCondType::token)
{ {
if (c->tokenType == eCondTokenType::inttoken) { if (c->tokenType == eCondTokenType::inttoken) {
int tokenVal = tokenContainer->IntToken(c->tokenIndex); int tokenVal = tokenContainer->IntToken(c->tokenIndex);
condTrue = (tokenVal > 0) ? true : false; condTrue = (tokenVal > 0) ? true : false;
} else if (c->tokenType == eCondTokenType::stringtoken) { } else if (c->tokenType == eCondTokenType::stringtoken) {
char *tokenVal = tokenContainer->StringToken(c->tokenIndex); char *tokenVal = tokenContainer->StringToken(c->tokenIndex);
if (tokenVal) 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) { if (c->tokenType == eCondTokenType::inttoken) {
int tokenVal = tokenContainer->IntToken(c->tokenIndex); 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) { if (c->tokenType == eCondTokenType::inttoken) {
int tokenVal = tokenContainer->IntToken(c->tokenIndex); 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) { if (c->tokenType == eCondTokenType::stringtoken) {
char *tokenVal = tokenContainer->StringToken(c->tokenIndex); 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) { if (c->tokenType == eCondTokenType::stringtoken) {
char *tokenVal = tokenContainer->StringToken(c->tokenIndex); char *tokenVal = tokenContainer->StringToken(c->tokenIndex);
@ -284,7 +284,7 @@ bool cCondition::True(void) {
if (c->operation == eCondOp::tAnd) { if (c->operation == eCondOp::tAnd) {
ok = ok && condTrue; ok = ok && condTrue;
} else if (c->operation == eCondOp::tOr) { } else if (c->operation == eCondOp::tOr) {
ok = ok || condTrue; ok = ok || condTrue;
} }
} }
return ok; return ok;
@ -470,8 +470,8 @@ void cCondition::SetTokenIndex(cCond *c, const char *token) {
/****************************************************************** /******************************************************************
* cSummand * cSummand
******************************************************************/ ******************************************************************/
cSummand::cSummand(const char *summand) { cSummand::cSummand(const char *summand) {
this->summand = strdup(summand); this->summand = strdup(summand);
} }
cSummand::cSummand(const cSummand &other) { cSummand::cSummand(const cSummand &other) {
@ -485,7 +485,7 @@ cSummand::cSummand(const cSummand &other) {
} }
cSummand::~cSummand(void) { cSummand::~cSummand(void) {
free(summand); free(summand);
} }
void cSummand::Debug(void) { void cSummand::Debug(void) {
@ -564,7 +564,7 @@ bool cNumericExpr::CacheStatic(void) {
value = atoi(expr); value = atoi(expr);
return true; return true;
} }
//check if expression is a percent expression //check if expression is a percent expression
if (PercentValue(expr)) { if (PercentValue(expr)) {
return true; return true;
@ -676,7 +676,7 @@ int cNumericExpr::Calculate(void) {
if (f->multiplication) if (f->multiplication)
factor *= fac; factor *= fac;
else if (fac) else if (fac)
factor /= fac; factor /= fac;
} }
if (s->positive) if (s->positive)
result += factor; result += factor;
@ -722,7 +722,7 @@ bool cNumericExpr::IsNumericExpression(const char *e) {
else else
return false; return false;
} }
return true; return true;
} }
bool cNumericExpr::PercentValue(const char *e) { bool cNumericExpr::PercentValue(const char *e) {
@ -762,7 +762,7 @@ char *cNumericExpr::ReplacePercentValue(char *e) {
if (horizontal) { if (horizontal) {
sprintf(replacement, "%.5f*{areawidth}", percentVal); sprintf(replacement, "%.5f*{areawidth}", percentVal);
} else { } else {
sprintf(replacement, "%.5f*{areaheight}", percentVal); sprintf(replacement, "%.5f*{areaheight}", percentVal);
} }
int len = strlen(replacement) + 1; int len = strlen(replacement) + 1;
@ -888,7 +888,7 @@ void cNumericExpr::CreateFactors(void) {
f->constValue = EvaluateExpressionDouble(sum); f->constValue = EvaluateExpressionDouble(sum);
s->factors.Add(f); s->factors.Add(f);
free(sum); free(sum);
continue; continue;
} }
bool multiplication = true; bool multiplication = true;
char *fac = strtok(sum, delimiterFac); char *fac = strtok(sum, delimiterFac);
@ -906,7 +906,7 @@ void cNumericExpr::CreateFactors(void) {
} else if (SetReferenceFactor(f, fac)) { } else if (SetReferenceFactor(f, fac)) {
f->multiplication = multiplication; f->multiplication = multiplication;
s->factors.Add(f); s->factors.Add(f);
} else if (SetGeometryFactor(f, fac)) { } else if (SetGeometryFactor(f, fac)) {
f->multiplication = multiplication; f->multiplication = multiplication;
s->factors.Add(f); s->factors.Add(f);
} else { } else {
@ -961,7 +961,7 @@ bool cNumericExpr::SetReferenceFactor(cFactor *f, char *tokenName) {
f->type = eFactorType::widthref; f->type = eFactorType::widthref;
} else if (startswith(tokenName, "{height(") && endswith(tokenName, ")}")) { } else if (startswith(tokenName, "{height(") && endswith(tokenName, ")}")) {
start = 8; start = 8;
f->type = eFactorType::heightref; f->type = eFactorType::heightref;
} }
if (start == 0) if (start == 0)
@ -986,7 +986,7 @@ bool cNumericExpr::SetGeometryFactor(cFactor *f, char *tokenName) {
f->type = eFactorType::columnwidth; f->type = eFactorType::columnwidth;
ok = true; ok = true;
} else if (!strcmp(tokenName, "{rowheight}")) { } else if (!strcmp(tokenName, "{rowheight}")) {
f->type = eFactorType::rowheight; f->type = eFactorType::rowheight;
ok = true; ok = true;
} }
return ok; return ok;
@ -1007,7 +1007,7 @@ void cNumericExpr::ConsolidateSummand(void) {
s = constSummand; s = constSummand;
} }
} }
} }
} }
void cNumericExpr::ConsolidateFactors(void) { void cNumericExpr::ConsolidateFactors(void) {
@ -1020,7 +1020,7 @@ void cNumericExpr::ConsolidateFactors(void) {
} else { } else {
if (f->multiplication) if (f->multiplication)
constFactor->constValue *= f->constValue; constFactor->constValue *= f->constValue;
else else
constFactor->constValue /= f->constValue; constFactor->constValue /= f->constValue;
s->factors.Del(f); s->factors.Del(f);
f = constFactor; f = constFactor;
@ -1042,7 +1042,7 @@ cColor::cColor(const char *expression) {
cColor::cColor(const cColor &other) { cColor::cColor(const cColor &other) {
globals = other.globals; globals = other.globals;
expr = strdup(other.expr); expr = strdup(other.expr);
value = other.value; value = other.value;
} }
cColor::~cColor(void) { cColor::~cColor(void) {
@ -1442,7 +1442,7 @@ bool cTextExpr::ParsePrintfToken(cTextToken *t) {
strncpy(buffer, startExpr+1, expLen); strncpy(buffer, startExpr+1, expLen);
buffer[expLen] = '\0'; buffer[expLen] = '\0';
t->printfExpr = strdup(buffer); t->printfExpr = strdup(buffer);
//find variables //find variables
char *startVar = strchr(t->constValue, ','); char *startVar = strchr(t->constValue, ',');
if (!startVar) if (!startVar)
@ -1525,7 +1525,7 @@ void cTextExpr::DeterminatePrintfToken(cTextToken *t) {
} }
} else if (t->printfVarIndices[i].type == ePrintfVarType::looptoken && loopInfo && loopInfo->row >= 0) { } else if (t->printfVarIndices[i].type == ePrintfVarType::looptoken && loopInfo && loopInfo->row >= 0) {
if (tokenContainer->LoopToken(loopInfo->index, loopInfo->row, t->printfVarIndices[i].index)) { 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 { } else {
//search end of text //search end of text
char *p = start; char *p = start;
while (*p) while (*p) {
len++; p++; len++; p++; }
len++; len++;
} }
val = (char*)malloc(len+1); val = (char*)malloc(len+1);

View File

@ -69,7 +69,7 @@ void cSDDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
view->SetMessage(Type, 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) if (!view)
return false; return false;
if (Index == 0) { if (Index == 0) {

View File

@ -23,7 +23,8 @@ public:
virtual void SetTitle(const char *Title); 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 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 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 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 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); virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New);

View File

@ -20,7 +20,7 @@
#endif #endif
static const char *VERSION = "1.2.3"; static const char *VERSION = "1.2.4";
static const char *DESCRIPTION = trNOOP("Skin Designer"); static const char *DESCRIPTION = trNOOP("Skin Designer");
class cPluginSkinDesigner : public cPlugin, public skindesignerapi::SkindesignerAPI { class cPluginSkinDesigner : public cPlugin, public skindesignerapi::SkindesignerAPI {
@ -114,7 +114,7 @@ bool cPluginSkinDesigner::Start(void) {
cImageImporterSVG::InitLibRSVG(); cImageImporterSVG::InitLibRSVG();
cGlobalTimers::StartRefreshThread(); cGlobalTimers::StartRefreshThread();
bool trueColorAvailable = true; bool trueColorAvailable = true;
if (!cOsdProvider::SupportsTrueColor()) { if (!cOsdProvider::SupportsTrueColor()) {
esyslog("skindesigner: No TrueColor OSD found! Using default Skin LCARS!"); esyslog("skindesigner: No TrueColor OSD found! Using default Skin LCARS!");
trueColorAvailable = false; trueColorAvailable = false;
@ -221,7 +221,7 @@ const char **cPluginSkinDesigner::SVDRPHelpPages(void) {
} }
cString cPluginSkinDesigner::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) { cString cPluginSkinDesigner::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) {
cSkinDesigner *activeSkin = NULL; cSkinDesigner *activeSkin = NULL;
cSkinDesigner *availableSkin = NULL; cSkinDesigner *availableSkin = NULL;
config.InitSkinRefsIterator(); config.InitSkinRefsIterator();