Moins,
gibt es für die aktuellen 2.6er VDR Versionen einen Patch wie den menuselection, der mehr als 9 Menüpunkte mit Nummer anzeigt und anwählen lässt?
Danke und ciao.
Michael.
Moins,
gibt es für die aktuellen 2.6er VDR Versionen einen Patch wie den menuselection, der mehr als 9 Menüpunkte mit Nummer anzeigt und anwählen lässt?
Danke und ciao.
Michael.
Hallo Michael,
Description: Allow selection of menu items by entering more than one digit
Author: Rolf Ahrenberg
Origin: Not available anymore
Index: vdr-2.6.3/osdbase.c
===================================================================
--- vdr-2.6.3.orig/osdbase.c
+++ vdr-2.6.3/osdbase.c
@@ -83,6 +83,7 @@ cOsdMenu::cOsdMenu(const char *Title, in
{
isMenu = true;
digit = 0;
+ key_nr = -1;
hasHotkeys = false;
displayMenuItems = 0;
title = NULL;
@@ -142,7 +143,7 @@ const char *cOsdMenu::hk(const char *s)
digit = -1; // prevents automatic hotkeys - input already has them
if (digit >= 0) {
digit++;
- buffer = cString::sprintf(" %c %s", (digit < 10) ? '0' + digit : ' ' , s);
+ buffer = cString::sprintf(" %2d%s %s", digit, (digit > 9) ? "" : " ", s);
s = buffer;
}
}
@@ -497,20 +498,60 @@ void cOsdMenu::Mark(void)
}
}
+#define MENUKEY_TIMEOUT 1500
+
eOSState cOsdMenu::HotKey(eKeys Key)
{
- for (cOsdItem *item = First(); item; item = Next(item)) {
+ bool match = false;
+ bool highlight = false;
+ int item_nr;
+ int i;
+
+ if (Key == kNone) {
+ if (lastActivity.TimedOut())
+ Key = kOk;
+ else
+ return osContinue;
+ }
+ else
+ lastActivity.Set(MENUKEY_TIMEOUT);
+ for (cOsdItem *item = Last(); item; item = Prev(item)) {
const char *s = item->Text();
- if (s && (s = skipspace(s)) != NULL) {
- if (*s == Key - k1 + '1') {
+ i = 0;
+ item_nr = 0;
+ if (s && (s = skipspace(s)) != NULL && '0' <= s[i] && s[i] <= '9') {
+ do {
+ item_nr = item_nr * 10 + (s[i] - '0');
+ }
+ while ( !((s[++i] == '\t')||(s[i] == ' ')) && (s[i] != '\0') && ('0' <= s[i]) && (s[i] <= '9'));
+ if ((Key == kOk) && (item_nr == key_nr)) {
current = item->Index();
RefreshCurrent();
Display();
cRemote::Put(kOk, true);
+ key_nr = -1;
break;
}
+ else if (Key != kOk) {
+ if (!highlight && (item_nr == (Key - k0))) {
+ highlight = true;
+ current = item->Index();
+ }
+ if (!match && (key_nr == -1) && ((item_nr / 10) == (Key - k0))) {
+ match = true;
+ key_nr = (Key - k0);
+ }
+ else if (((key_nr == -1) && (item_nr == (Key - k0))) || (!match && (key_nr >= 0) && (item_nr == (10 * key_nr + Key - k0)))) {
+ current = item->Index();
+ cRemote::Put(kOk, true);
+ key_nr = -1;
+ break;
+ }
+ }
}
}
+ if ((!match) && (Key != kNone))
+ key_nr = -1;
return osContinue;
}
@@ -551,8 +592,8 @@ eOSState cOsdMenu::ProcessKey(eKeys Key)
}
}
switch (int(Key)) {
- case k0: return osUnknown;
- case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
+ case kNone:
+ case k0...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
case kUp|k_Repeat:
case kUp: if (menuOrientation == moHorizontal) PageUp(); else CursorUp(); break;
case kDown|k_Repeat:
Index: vdr-2.6.3/osdbase.h
===================================================================
--- vdr-2.6.3.orig/osdbase.h
+++ vdr-2.6.3/osdbase.h
@@ -101,6 +101,8 @@ private:
char *status;
int digit;
bool hasHotkeys;
+ int key_nr;
+ cTimeMs lastActivity;
void DisplayHelp(bool Force = false);
protected:
void SetDisplayMenu(void);
Display More
Patch von "seahawk"aus dem Paket vdr-2.6.3-patches!
Gruss
Wolfgang
Danke!
Don’t have an account yet? Register yourself now and be a part of our community!