[vdr] [PATCH] Make RGYB buttons customizable (attempt 2)
Oliver Schinagl
oliver+list at schinagl.nl
Sat Aug 11 23:24:48 CEST 2012
Patch reminder, in case it was missed the first time around :)
On 07/23/12 11:21, oliver+list at schinagl.nl wrote:
> From: Oliver Schinagl<oliver at schinagl.nl>
>
> I've noticed a nasty typo in menu.c where all 4 buttons would be displayed
> as Button0. So a cosmetic issue only! Since there where no comments on my
> previous e-mails have not been answerd yet, so sending it as a whole patch
> again instead of a simple patch upon patch ;)
>
> VDR currently assumes all remote controls have the same order of buttons.
> This is not always the case. This patch allows you to change the order
> of buttons in the UI.
>
> This feature obviously only works on patched skins. Classic, lcars and
> sttng skins are patched. Unpatched skins will remain to work fine, but
> will ignore button order. Patching of the skin takes very minimum effort.
>
> config.*: Load/Save Button information
> menu.c : Add button selection to the UI
> skin*.c : Use button order from the config file
>
> Signed-off-by: Oliver Schinagl<oliver at schinagl.nl>
> ---
> config.c | 12 ++++++++++++
> config.h | 4 ++++
> menu.c | 9 +++++++++
> skinclassic.c | 11 +++++++----
> skinlcars.c | 19 +++++++++++--------
> skinsttng.c | 11 +++++++----
> 6 files changed, 50 insertions(+), 16 deletions(-)
>
> diff --git a/config.c b/config.c
> index 56454df..165bcee 100644
> --- a/config.c
> +++ b/config.c
> @@ -424,6 +424,10 @@ cSetup::cSetup(void)
> UseDolbyDigital = 1;
> ChannelInfoPos = 0;
> ChannelInfoTime = 5;
> + Button0 = 0;
> + Button1 = 1;
> + Button2 = 2;
> + Button3 = 3;
> OSDLeftP = 0.03;
> OSDTopP = 0.03;
> OSDWidthP = 0.93;
> @@ -620,6 +624,10 @@ bool cSetup::Parse(const char *Name, const char *Value)
> else if (!strcasecmp(Name, "UseDolbyDigital")) UseDolbyDigital = atoi(Value);
> else if (!strcasecmp(Name, "ChannelInfoPos")) ChannelInfoPos = atoi(Value);
> else if (!strcasecmp(Name, "ChannelInfoTime")) ChannelInfoTime = atoi(Value);
> + else if (!strcasecmp(Name, "Button0")) Button0 = atoi(Value);
> + else if (!strcasecmp(Name, "Button1")) Button1 = atoi(Value);
> + else if (!strcasecmp(Name, "Button2")) Button2 = atoi(Value);
> + else if (!strcasecmp(Name, "Button3")) Button3 = atoi(Value);
> else if (!strcasecmp(Name, "OSDLeftP")) OSDLeftP = atof(Value);
> else if (!strcasecmp(Name, "OSDTopP")) OSDTopP = atof(Value);
> else if (!strcasecmp(Name, "OSDWidthP")) { OSDWidthP = atof(Value); ChkDoublePlausibility(OSDWidthP, 0.87); }
> @@ -719,6 +727,10 @@ bool cSetup::Save(void)
> Store("UseDolbyDigital", UseDolbyDigital);
> Store("ChannelInfoPos", ChannelInfoPos);
> Store("ChannelInfoTime", ChannelInfoTime);
> + Store("Button0", Button0);
> + Store("Button1", Button1);
> + Store("Button2", Button2);
> + Store("Button3", Button3);
> Store("OSDLeftP", OSDLeftP);
> Store("OSDTopP", OSDTopP);
> Store("OSDWidthP", OSDWidthP);
> diff --git a/config.h b/config.h
> index acdf77a..3dd86ae 100644
> --- a/config.h
> +++ b/config.h
> @@ -294,6 +294,10 @@ public:
> int UseDolbyDigital;
> int ChannelInfoPos;
> int ChannelInfoTime;
> + int Button0;
> + int Button1;
> + int Button2;
> + int Button3;
> double OSDLeftP, OSDTopP, OSDWidthP, OSDHeightP;
> int OSDLeft, OSDTop, OSDWidth, OSDHeight;
> double OSDAspect;
> diff --git a/menu.c b/menu.c
> index 9f4c54e..bea03b1 100644
> --- a/menu.c
> +++ b/menu.c
> @@ -2510,6 +2510,7 @@ void cMenuSetupBase::Store(void)
> class cMenuSetupOSD : public cMenuSetupBase {
> private:
> const char *useSmallFontTexts[3];
> + const char *buttonColorTexts[4];
> int osdLanguageIndex;
> int numSkins;
> int originalSkinIndex;
> @@ -2560,12 +2561,20 @@ void cMenuSetupOSD::Set(void)
> useSmallFontTexts[0] = tr("never");
> useSmallFontTexts[1] = tr("skin dependent");
> useSmallFontTexts[2] = tr("always");
> + buttonColorTexts[0] = tr("Key$Red");
> + buttonColorTexts[1] = tr("Key$Green");
> + buttonColorTexts[2] = tr("Key$Yellow");
> + buttonColorTexts[3] = tr("Key$Blue");
> Clear();
> SetSection(tr("OSD"));
> Add(new cMenuEditStraItem(tr("Setup.OSD$Language"),&osdLanguageIndex, I18nNumLanguagesWithLocale(),&I18nLanguages()->At(0)));
> Add(new cMenuEditStraItem(tr("Setup.OSD$Skin"),&skinIndex, numSkins, skinDescriptions));
> if (themes.NumThemes())
> Add(new cMenuEditStraItem(tr("Setup.OSD$Theme"),&themeIndex, themes.NumThemes(), themes.Descriptions()));
> + Add(new cMenuEditStraItem(tr("Setup.OSD$Button0"),&data.Button0, 4, buttonColorTexts));
> + Add(new cMenuEditStraItem(tr("Setup.OSD$Button1"),&data.Button1, 4, buttonColorTexts));
> + Add(new cMenuEditStraItem(tr("Setup.OSD$Button2"),&data.Button2, 4, buttonColorTexts));
> + Add(new cMenuEditStraItem(tr("Setup.OSD$Button3"),&data.Button3, 4, buttonColorTexts));
> Add(new cMenuEditPrcItem( tr("Setup.OSD$Left (%)"),&data.OSDLeftP, 0.0, 0.5));
> Add(new cMenuEditPrcItem( tr("Setup.OSD$Top (%)"),&data.OSDTopP, 0.0, 0.5));
> Add(new cMenuEditPrcItem( tr("Setup.OSD$Width (%)"),&data.OSDWidthP, 0.5, 1.0));
> diff --git a/skinclassic.c b/skinclassic.c
> index 64944de..2693036 100644
> --- a/skinclassic.c
> +++ b/skinclassic.c
> @@ -291,16 +291,19 @@ void cSkinClassicDisplayMenu::SetTitle(const char *Title)
> void cSkinClassicDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue)
> {
> const cFont *font = cFont::GetFont(fontOsd);
> + const char *lutKeys[] = {Red, Green, Yellow, Blue};
> + tColor lutFg[4] = {clrButtonRedFg, clrButtonGreenFg, clrButtonYellowFg, clrButtonBlueFg};
> + tColor lutBg[4] = {clrButtonRedBg, clrButtonGreenBg, clrButtonYellowBg, clrButtonBlueBg};
> int w = x3 - x0;
> int t0 = x0;
> int t1 = x0 + w / 4;
> int t2 = x0 + w / 2;
> int t3 = x3 - w / 4;
> int t4 = x3;
> - osd->DrawText(t0, y4, Red, Theme.Color(clrButtonRedFg), Red ? Theme.Color(clrButtonRedBg) : Theme.Color(clrBackground), font, t1 - t0, 0, taCenter);
> - osd->DrawText(t1, y4, Green, Theme.Color(clrButtonGreenFg), Green ? Theme.Color(clrButtonGreenBg) : Theme.Color(clrBackground), font, t2 - t1, 0, taCenter);
> - osd->DrawText(t2, y4, Yellow, Theme.Color(clrButtonYellowFg), Yellow ? Theme.Color(clrButtonYellowBg) : Theme.Color(clrBackground), font, t3 - t2, 0, taCenter);
> - osd->DrawText(t3, y4, Blue, Theme.Color(clrButtonBlueFg), Blue ? Theme.Color(clrButtonBlueBg) : Theme.Color(clrBackground), font, t4 - t3, 0, taCenter);
> + osd->DrawText(t0, y4, lutKeys[Setup.Button0], Theme.Color(lutFg[Setup.Button0]), lutKeys[Setup.Button0] ? Theme.Color(lutBg[Setup.Button0]) : Theme.Color(lutBg[Setup.Button0]), font, t1 - t0, 0, taCenter);
> + osd->DrawText(t1, y4, lutKeys[Setup.Button1], Theme.Color(lutFg[Setup.Button1]), lutKeys[Setup.Button1] ? Theme.Color(lutBg[Setup.Button1]) : Theme.Color(lutBg[Setup.Button1]), font, t2 - t1, 0, taCenter);
> + osd->DrawText(t2, y4, lutKeys[Setup.Button2], Theme.Color(lutFg[Setup.Button2]), lutKeys[Setup.Button2] ? Theme.Color(lutBg[Setup.Button2]) : Theme.Color(lutBg[Setup.Button2]), font, t3 - t2, 0, taCenter);
> + osd->DrawText(t3, y4, lutKeys[Setup.Button3], Theme.Color(lutFg[Setup.Button3]), lutKeys[Setup.Button3] ? Theme.Color(lutBg[Setup.Button3]) : Theme.Color(lutBg[Setup.Button3]), font, t4 - t3, 0, taCenter);
> }
>
> void cSkinClassicDisplayMenu::SetMessage(eMessageType Type, const char *Text)
> diff --git a/skinlcars.c b/skinlcars.c
> index 5937efe..f58b90b 100644
> --- a/skinlcars.c
> +++ b/skinlcars.c
> @@ -1458,19 +1458,22 @@ void cSkinLCARSDisplayMenu::SetTitle(const char *Title)
>
> void cSkinLCARSDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue)
> {
> + const char *lutKeys[] = {Red, Green, Yellow, Blue};
> + tColor lutFg[4] = {clrButtonRedFg, clrButtonGreenFg, clrButtonYellowFg, clrButtonBlueFg};
> + tColor lutBg[4] = {clrButtonRedBg, clrButtonGreenBg, clrButtonYellowBg, clrButtonBlueBg};
> const cFont *font = cFont::GetFont(fontSml);
> if (MenuCategory() == mcMain) {
> - DrawMainButton(Red, xd00, xd01, xd02, xd03, yd02, yd03, Theme.Color(clrButtonRedFg), Theme.Color(clrButtonRedBg), font);
> - DrawMainButton(Green, xd04, xd05, xd06, xd07, yd02, yd03, Theme.Color(clrButtonGreenFg), Theme.Color(clrButtonGreenBg), font);
> - DrawMainButton(Yellow, xd00, xd01, xd02, xd03, yd04, yd05, Theme.Color(clrButtonYellowFg), Theme.Color(clrButtonYellowBg), font);
> - DrawMainButton(Blue, xd04, xd05, xd06, xd07, yd04, yd05, Theme.Color(clrButtonBlueFg), Theme.Color(clrButtonBlueBg), font);
> + DrawMainButton(lutKeys[Setup.Button0], xd00, xd01, xd02, xd03, yd02, yd03, Theme.Color(lutFg[Setup.Button0]), Theme.Color(lutBg[Setup.Button0]), font);
> + DrawMainButton(lutKeys[Setup.Button1], xd04, xd05, xd06, xd07, yd02, yd03, Theme.Color(lutFg[Setup.Button1]), Theme.Color(lutBg[Setup.Button1]), font);
> + DrawMainButton(lutKeys[Setup.Button2], xd00, xd01, xd02, xd03, yd04, yd05, Theme.Color(lutFg[Setup.Button2]), Theme.Color(lutBg[Setup.Button2]), font);
> + DrawMainButton(lutKeys[Setup.Button3], xd04, xd05, xd06, xd07, yd04, yd05, Theme.Color(lutFg[Setup.Button3]), Theme.Color(lutBg[Setup.Button3]), font);
> }
> else {
> int h = yb15 - yb14;
> - osd->DrawText(xb02, yb14, Red, Theme.Color(clrButtonRedFg), Theme.Color(clrButtonRedBg), font, xb03 - xb02, h, taLeft | taBorder);
> - osd->DrawText(xb06, yb14, Green, Theme.Color(clrButtonGreenFg), Theme.Color(clrButtonGreenBg), font, xb07 - xb06, h, taLeft | taBorder);
> - osd->DrawText(xb10, yb14, Yellow, Theme.Color(clrButtonYellowFg), Theme.Color(clrButtonYellowBg), font, xb11 - xb10, h, taLeft | taBorder);
> - osd->DrawText(xb14, yb14, Blue, Theme.Color(clrButtonBlueFg), Theme.Color(clrButtonBlueBg), font, xb15 - xb14, h, taLeft | taBorder);
> + osd->DrawText(xb02, yb14, lutKeys[Setup.Button0], Theme.Color(lutFg[Setup.Button0]), Theme.Color(lutBg[Setup.Button0]), font, xb03 - xb02, h, taLeft | taBorder);
> + osd->DrawText(xb06, yb14, lutKeys[Setup.Button1], Theme.Color(lutFg[Setup.Button1]), Theme.Color(lutBg[Setup.Button1]), font, xb07 - xb06, h, taLeft | taBorder);
> + osd->DrawText(xb10, yb14, lutKeys[Setup.Button2], Theme.Color(lutFg[Setup.Button2]), Theme.Color(lutBg[Setup.Button2]), font, xb11 - xb10, h, taLeft | taBorder);
> + osd->DrawText(xb14, yb14, lutKeys[Setup.Button3], Theme.Color(lutFg[Setup.Button3]), Theme.Color(lutBg[Setup.Button3]), font, xb15 - xb14, h, taLeft | taBorder);
> }
> }
>
> diff --git a/skinsttng.c b/skinsttng.c
> index d985538..49c94d4 100644
> --- a/skinsttng.c
> +++ b/skinsttng.c
> @@ -571,6 +571,9 @@ void cSkinSTTNGDisplayMenu::SetTitle(const char *Title)
>
> void cSkinSTTNGDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue)
> {
> + const char *lutKeys[] = {Red, Green, Yellow, Blue};
> + tColor lutFg[4] = {clrButtonRedFg, clrButtonGreenFg, clrButtonYellowFg, clrButtonBlueFg};
> + tColor lutBg[4] = {clrButtonRedBg, clrButtonGreenBg, clrButtonYellowBg, clrButtonBlueBg};
> cString date = DayDateTime();
> const cFont *font = cFont::GetFont(fontSml);
> int d = 2 * Gap;
> @@ -585,10 +588,10 @@ void cSkinSTTNGDisplayMenu::SetButtons(const char *Red, const char *Green, const
> osd->DrawRectangle(t1 + d2, y6, t2 - d2, y7 - 1, clrBlack);
> osd->DrawRectangle(t2 + d2, y6, t3 - d2, y7 - 1, clrBlack);
> osd->DrawRectangle(t3 + d2, y6, t4 - d2, y7 - 1, clrBlack);
> - osd->DrawText(t0 + d, y6, Red, Theme.Color(clrButtonRedFg), Theme.Color(clrButtonRedBg), font, t1 - t0 - 2 * d, 0, taCenter);
> - osd->DrawText(t1 + d, y6, Green, Theme.Color(clrButtonGreenFg), Theme.Color(clrButtonGreenBg), font, t2 - t1 - 2 * d, 0, taCenter);
> - osd->DrawText(t2 + d, y6, Yellow, Theme.Color(clrButtonYellowFg), Theme.Color(clrButtonYellowBg), font, t3 - t2 - 2 * d, 0, taCenter);
> - osd->DrawText(t3 + d, y6, Blue, Theme.Color(clrButtonBlueFg), Theme.Color(clrButtonBlueBg), font, t4 - t3 - 2 * d, 0, taCenter);
> + osd->DrawText(t0 + d, y6, lutKeys[Setup.Button0], Theme.Color(lutFg[Setup.Button0]), Theme.Color(lutBg[Setup.Button0]), font, t1 - t0 - 2 * d, 0, taCenter);
> + osd->DrawText(t1 + d, y6, lutKeys[Setup.Button1], Theme.Color(lutFg[Setup.Button1]), Theme.Color(lutBg[Setup.Button1]), font, t2 - t1 - 2 * d, 0, taCenter);
> + osd->DrawText(t2 + d, y6, lutKeys[Setup.Button2], Theme.Color(lutFg[Setup.Button2]), Theme.Color(lutBg[Setup.Button2]), font, t3 - t2 - 2 * d, 0, taCenter);
> + osd->DrawText(t3 + d, y6, lutKeys[Setup.Button3], Theme.Color(lutFg[Setup.Button3]), Theme.Color(lutBg[Setup.Button3]), font, t4 - t3 - 2 * d, 0, taCenter);
> }
>
> void cSkinSTTNGDisplayMenu::SetMessage(eMessageType Type, const char *Text)
More information about the vdr
mailing list