45 text = Copy ? strdup(Text ? Text :
"") : (
char *)Text;
126 if (
digit == 0 &&
'1' <= *s && *s <=
'9' && *(s + 1) ==
' ')
155 status = s ? strdup(s) : NULL;
162 title = strdup(Title);
174 void cOsdMenu::SetHelp(
const char *Red,
const char *Green,
const char *Yellow,
const char *Blue)
233 if (current < 0 && item->Selectable())
249 bool CurrentSelectable = (i ==
current) && item->Selectable();
251 if (CurrentSelectable)
284 if (
cMenuEditItem *MenuEditItem = dynamic_cast<cMenuEditItem *>(item)) {
285 if (!MenuEditItem->DisplayHelp())
296 int Index = Item->
Index();
297 int Offset = Index -
first;
327 int last =
Count() - 1;
330 while (--tmpCurrent !=
current) {
331 if (tmpCurrent < 0) {
339 tmpCurrent = last + 1;
346 if (
first <= tmpCurrent && tmpCurrent <= lastOnScreen)
353 else if (
current > lastOnScreen) {
366 int last =
Count() - 1;
369 while (++tmpCurrent !=
current) {
370 if (tmpCurrent > last) {
371 if (
first < last - displayMenuItems) {
373 first = last - displayMenuItems + 1;
385 if (
first <= tmpCurrent && tmpCurrent <= lastOnScreen)
390 if (
first + displayMenuItems > last)
391 first =
max(0, last - displayMenuItems + 1);
406 int oldFirst =
first;
409 int last =
Count() - 1;
417 if (tmpCurrent < 0) {
422 current = tmpCurrent <= last ? tmpCurrent : -1;
441 int oldFirst =
first;
444 int last =
Count() - 1;
452 if (tmpCurrent > last) {
457 current = tmpCurrent > 0 ? tmpCurrent : -1;
476 SetStatus(
tr(
"Up/Dn for new location - OK to move"));
480 #define MENUKEY_TIMEOUT 1500
485 bool highlight =
false;
498 const char *s = item->Text();
501 if (s && (s =
skipspace(s)) !=
'\0' &&
'0' <= s[i] && s[i] <=
'9') {
503 item_nr = item_nr * 10 + (s[i] -
'0');
505 while ( !((s[++i] ==
'\t')||(s[i] ==
' ')) && (s[i] !=
'\0') && (
'0' <= s[i]) && (s[i] <=
'9'));
506 if ((Key ==
kOk) && (item_nr ==
key_nr)) {
514 else if (Key !=
kOk) {
515 if (!highlight && (item_nr == (Key -
k0))) {
519 if (!match && (
key_nr == -1) && ((item_nr / 10) == (Key -
k0))) {
523 else if (((
key_nr == -1) && (item_nr == (Key -
k0))) || (!match && (
key_nr >= 0) && (item_nr == (10 * key_nr + Key -
k0)))) {
532 if ((!match) && (Key !=
kNone))