Hey all,

Ever had the trouble that your remote's color navigation key weren't the
same as VDR's? Well I wrote this patch the past 4 hours which lets you
configure them.

By doing so, the order of the buttons in the menu changes depending on
whatever you tell it to. So finally that remote can match whatever is
displayed on screen.

This only works for the classic and st-tng  skins, as those are supplied
with VDR. The Skin needs to support this feature. If there is no skin
support, the setting simply gets ignored by that skin. Since only the
order of the buttons in the skin are being changed any plugin
configuration will be independent from this change. What I mean is that,
when a plugin has configured blue to take you straight to the photo
gallery, the blue button will still do this, no matter where it is on
the remote. If the plugin however used the blue key to fast forward,
because it is the right most key, and thus made sense logically there,
it will no longer when you move the keys around. Practically, this will
boil down to a handful of plugins depending on location which imo is a
little weird anyway :)

Also, I patched it on a Gentoo box using the latest 1.6 ebuild they have
so line numbers may be a little off in the patch due to various patches
Gentoo may apply. It's the only dev. box for VDR I have so forgive me on
that.

I'm looking forward to the review :)

Oliver



diff -ru config.c.orig config.c
--- config.c.orig	2010-09-16 03:34:59.000000000 +0200
+++ config.c	2010-09-16 03:35:36.000000000 +0200
@@ -218,6 +218,10 @@
   strcpy(OSDLanguage, ""); // default is taken from environment
   strcpy(OSDSkin, "sttng");
   strcpy(OSDTheme, "default");
+  Button0 = 0;
+  Button1 = 1;
+  Button2 = 2;
+  Button3 = 3;
   PrimaryDVB = 1;
   ShowInfoOnChSwitch = 1;
   TimeoutRequChInfo = 1;
@@ -417,6 +421,10 @@
   if      (!strcasecmp(Name, "OSDLanguage"))       { strn0cpy(OSDLanguage, Value, sizeof(OSDLanguage)); I18nSetLocale(OSDLanguage); }
   else if (!strcasecmp(Name, "OSDSkin"))             Utf8Strn0Cpy(OSDSkin, Value, MaxSkinName);
   else if (!strcasecmp(Name, "OSDTheme"))            Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName);
+  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, "PrimaryDVB"))          PrimaryDVB         = atoi(Value);
   else if (!strcasecmp(Name, "ShowInfoOnChSwitch"))  ShowInfoOnChSwitch = atoi(Value);
   else if (!strcasecmp(Name, "TimeoutRequChInfo"))   TimeoutRequChInfo  = atoi(Value);
@@ -524,6 +532,10 @@
   Store("OSDLanguage",        OSDLanguage);
   Store("OSDSkin",            OSDSkin);
   Store("OSDTheme",           OSDTheme);
+  Store("Button0",            Button0);
+  Store("Button1",            Button1);
+  Store("Button2",            Button2);
+  Store("Button3",            Button3);
   Store("PrimaryDVB",         PrimaryDVB);
   Store("ShowInfoOnChSwitch", ShowInfoOnChSwitch);
   Store("TimeoutRequChInfo",  TimeoutRequChInfo);
diff -ru config.h.orig config.h > ~/Desktop/config.h.diff
--- config.h.orig	2010-09-16 03:34:39.000000000 +0200
+++ config.h	2010-09-16 03:35:38.000000000 +0200
@@ -219,6 +219,10 @@
   char OSDLanguage[I18N_MAX_LOCALE_LEN];
   char OSDSkin[MaxSkinName];
   char OSDTheme[MaxThemeName];
+  int Button0;
+  int Button1;
+  int Button2;
+  int Button3;
   int PrimaryDVB;
   int ShowInfoOnChSwitch;
   int TimeoutRequChInfo;
diff -ru menu.c.orig menu.c
--- menu.c.orig	2010-09-16 03:34:44.000000000 +0200
+++ menu.c	2010-09-16 03:35:36.000000000 +0200
@@ -2422,6 +2422,7 @@
   const char *useSmallFontTexts[3];
   const char *mainMenuTitle[MAXMAINMENUTITLE];
   int osdLanguageIndex;
+  const char *buttonColorTexts[4];
   int numSkins;
   int originalSkinIndex;
   int skinIndex;
@@ -2475,12 +2476,20 @@
   mainMenuTitle[1]=tr("VDR - text");
   mainMenuTitle[2]=tr("text");
   mainMenuTitle[3]=tr("VDR - version");
+  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 cMenuEditIntItem( tr("Setup.OSD$Left"),                   &data.OSDLeft, 0, MAXOSDWIDTH));
   Add(new cMenuEditIntItem( tr("Setup.OSD$Top"),                    &data.OSDTop, 0, MAXOSDHEIGHT));
   Add(new cMenuEditIntItem( tr("Setup.OSD$Width"),                  &data.OSDWidth, MINOSDWIDTH, MAXOSDWIDTH));
diff -ru skinclassic.c.orig skinclassic.c
--- skinclassic.c.orig	2010-09-16 03:35:21.000000000 +0200
+++ skinclassic.c	2010-09-16 03:35:36.000000000 +0200
@@ -277,16 +277,19 @@
 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 -ru skinsttng.c.orig skinsttng.c
--- skinsttng.c.orig	2010-09-16 03:35:23.000000000 +0200
+++ skinsttng.c	2010-09-16 03:35:36.000000000 +0200
@@ -499,6 +499,9 @@
 
 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 = 10;
@@ -513,10 +516,10 @@
   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)



_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to