Submenus are sometimes empty and it would be nice if there is something that notifies us that we should not expect any content _before_ we enter a submenu. A new function menu_is_empty() was introduced and empty menus and menuconfigs are now marked by "----" as opposed to non-empty ones that are marked by "--->". This scheme was suggested by "Yann E. MORIN" <yann.morin.1998@free.fr>.
Unified · Split
| @@ -14,6 +14,7 @@ P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap))); · 13 unmodified lines | ||
| 14 | 14 | /* menu.c */ |
| 15 | 15 | P(rootmenu,struct menu,); |
| 16 | 16 | |
| 17 | +P(menu_is_empty, bool, (struct menu *menu)); | |
| 17 | 18 | P(menu_is_visible, bool, (struct menu *menu)); |
| 18 | 19 | P(menu_has_prompt, bool, (struct menu *menu)); |
| 19 | 20 | P(menu_get_prompt,const char *,(struct menu *menu)); |
| @@ -48,7 +48,7 @@ static const char mconf_readme[] = N_( · 47 unmodified lines | ||
| 48 | 48 | "----------\n" |
| 49 | 49 | "o Use the Up/Down arrow keys (cursor keys) to highlight the item\n" |
| 50 | 50 | " you wish to change or submenu wish to select and press <Enter>.\n" |
| 51 | −" Submenus are designated by \"--->\".\n" | |
| 51 | +" Submenus are designated by \"--->\", empty ones by \"----\".\n" | |
| 52 | 52 | "\n" |
| 53 | 53 | " Shortcut: Press the option's highlighted letter (hotkey).\n" |
| 54 | 54 | " Pressing a hotkey more than once will sequence\n" |
| @@ -176,7 +176,7 @@ static const char mconf_readme[] = N_( · 121 unmodified lines | ||
| 176 | 176 | "\n"), |
| 177 | 177 | menu_instructions[] = N_( |
| 178 | 178 | "Arrow keys navigate the menu. " |
| 179 | − "<Enter> selects submenus --->. " | |
| 179 | + "<Enter> selects submenus ---> (or empty submenus ----). " | |
| 180 | 180 | "Highlighted letters are hotkeys. " |
| 181 | 181 | "Pressing <Y> includes, <N> excludes, <M> modularizes features. " |
| 182 | 182 | "Press <Esc><Esc> to exit, <?> for Help, </> for Search. " |
| @@ -498,8 +498,9 @@ static void build_conf(struct menu *menu) · 315 unmodified lines | ||
| 498 | 498 | menu->data ? "-->" : "++>", |
| 499 | 499 | indent + 1, ' ', prompt); |
| 500 | 500 | } else |
| 501 | − item_make(" %*c%s --->", indent + 1, ' ', prompt); | |
| 502 | − | |
| 501 | + item_make(" %*c%s %s", | |
| 502 | + indent + 1, ' ', prompt, | |
| 503 | + menu_is_empty(menu) ? "----" : "--->"); | |
| 503 | 504 | item_set_tag('m'); |
| 504 | 505 | item_set_data(menu); |
| 505 | 506 | if (single_menu_mode && menu->data) |
| @@ -630,7 +631,7 @@ static void build_conf(struct menu *menu) · 124 unmodified lines | ||
| 630 | 631 | (sym_has_value(sym) || !sym_is_changable(sym)) ? |
| 631 | 632 | "" : _(" (NEW)")); |
| 632 | 633 | if (menu->prompt->type == P_MENU) { |
| 633 | − item_add_str(" --->"); | |
| 634 | + item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); | |
| 634 | 635 | return; |
| 635 | 636 | } |
| 636 | 637 | } |
| @@ -430,6 +430,22 @@ bool menu_has_prompt(struct menu *menu) · 429 unmodified lines | ||
| 430 | 430 | return true; |
| 431 | 431 | } |
| 432 | 432 | |
| 433 | +/* | |
| 434 | + * Determine if a menu is empty. | |
| 435 | + * A menu is considered empty if it contains no or only | |
| 436 | + * invisible entries. | |
| 437 | + */ | |
| 438 | +bool menu_is_empty(struct menu *menu) | |
| 439 | +{ | |
| 440 | + struct menu *child; | |
| 441 | + | |
| 442 | + for (child = menu->list; child; child = child->next) { | |
| 443 | + if (menu_is_visible(child)) | |
| 444 | + return(false); | |
| 445 | + } | |
| 446 | + return(true); | |
| 447 | +} | |
| 448 | + | |
| 433 | 449 | bool menu_is_visible(struct menu *menu) |
| 434 | 450 | { |
| 435 | 451 | struct menu *child; |
| @@ -45,8 +45,8 @@ static const char nconf_global_help[] = N_( · 44 unmodified lines | ||
| 45 | 45 | "<n> to remove it. You may press the <Space> key to cycle through the\n" |
| 46 | 46 | "available options.\n" |
| 47 | 47 | "\n" |
| 48 | −"A trailing \"--->\" designates a submenu.\n" | |
| 49 | −"\n" | |
| 48 | +"A trailing \"--->\" designates a submenu, a trailing \"----\" an\n" | |
| 49 | +"empty submenu.\n" | |
| 50 | 50 | "\n" |
| 51 | 51 | "Menu navigation keys\n" |
| 52 | 52 | "----------------------------------------------------------------------\n" |
| @@ -131,7 +131,7 @@ static const char nconf_global_help[] = N_( · 78 unmodified lines | ||
| 131 | 131 | "\n"), |
| 132 | 132 | menu_no_f_instructions[] = N_( |
| 133 | 133 | "Legend: [*] built-in [ ] excluded <M> module < > module capable.\n" |
| 134 | −"Submenus are designated by a trailing \"--->\".\n" | |
| 134 | +"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n" | |
| 135 | 135 | "\n" |
| 136 | 136 | "Use the following keys to navigate the menus:\n" |
| 137 | 137 | "Move up or down with <Up> and <Down>.\n" |
| @@ -148,7 +148,7 @@ menu_no_f_instructions[] = N_( · 10 unmodified lines | ||
| 148 | 148 | "For help related to the current menu entry press <?> or <h>.\n"), |
| 149 | 149 | menu_instructions[] = N_( |
| 150 | 150 | "Legend: [*] built-in [ ] excluded <M> module < > module capable.\n" |
| 151 | −"Submenus are designated by a trailing \"--->\".\n" | |
| 151 | +"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n" | |
| 152 | 152 | "\n" |
| 153 | 153 | "Use the following keys to navigate the menus:\n" |
| 154 | 154 | "Move up or down with <Up> or <Down>.\n" |
| @@ -760,9 +760,9 @@ static void build_conf(struct menu *menu) · 605 unmodified lines | ||
| 760 | 760 | indent + 1, ' ', prompt); |
| 761 | 761 | } else |
| 762 | 762 | item_make(menu, 'm', |
| 763 | − " %*c%s --->", | |
| 764 | − indent + 1, | |
| 765 | − ' ', prompt); | |
| 763 | + " %*c%s %s", | |
| 764 | + indent + 1, ' ', prompt, | |
| 765 | + menu_is_empty(menu) ? "----" : "--->"); | |
| 766 | 766 | |
| 767 | 767 | if (single_menu_mode && menu->data) |
| 768 | 768 | goto conf_childs; |
| @@ -904,7 +904,7 @@ static void build_conf(struct menu *menu) · 135 unmodified lines | ||
| 904 | 904 | (sym_has_value(sym) || !sym_is_changable(sym)) ? |
| 905 | 905 | "" : _(" (NEW)")); |
| 906 | 906 | if (menu->prompt && menu->prompt->type == P_MENU) { |
| 907 | − item_add_str(" --->"); | |
| 907 | + item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); | |
| 908 | 908 | return; |
| 909 | 909 | } |
| 910 | 910 | } |