stand/lua: Store menu entries in an "entries" table

Instead of directly listing them in menu.welcome and menu.boot_options,
store them at menu.welcome.entries and welcome.boot_options.entries.

This will come into play later when we need to re-order the welcome menu if
boot_single is specified.
This commit is contained in:
Kyle Evans 2018-02-19 16:25:43 +00:00
parent 280e990ba7
commit d87577468f
2 changed files with 185 additions and 180 deletions

View File

@ -166,7 +166,9 @@ function drawer.drawmenu(m)
-- print the menu and build the alias table
local alias_table = {};
local entry_num = 0;
for line_num, e in ipairs(m) do
local menu_entries = m.entries;
for line_num, e in ipairs(menu_entries) do
-- Allow menu items to be conditionally visible by specifying
-- a visible function.
if (e.visible ~= nil) and (not e.visible()) then

View File

@ -44,202 +44,205 @@ local carousel_choices = {};
-- loader menu tree is rooted at menu.welcome
menu.boot_options = {
-- return to welcome menu
{
entry_type = core.MENU_RETURN,
name = function()
return "Back to main menu" ..
color.highlight(" [Backspace]");
end
},
entries = {
-- return to welcome menu
{
entry_type = core.MENU_RETURN,
name = function()
return "Back to main menu" ..
color.highlight(" [Backspace]");
end
},
-- load defaults
{
entry_type = core.MENU_ENTRY,
name = function()
return "Load System " .. color.highlight("D") ..
"efaults";
end,
func = function()
core.setDefaults();
end,
alias = {"d", "D"}
},
-- load defaults
{
entry_type = core.MENU_ENTRY,
name = function()
return "Load System " .. color.highlight("D") ..
"efaults";
end,
func = function()
core.setDefaults();
end,
alias = {"d", "D"}
},
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "";
end
},
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "";
end
},
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "Boot Options:";
end
},
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "Boot Options:";
end
},
-- acpi
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff(color.highlight("A") .. "CPI :",
core.acpi);
end,
func = function()
core.setACPI();
end,
alias = {"a", "A"}
},
-- safe mode
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff("Safe " .. color.highlight("M") ..
"ode :", core.sm);
end,
func = function()
core.setSafeMode();
end,
alias = {"m", "M"}
},
-- single user
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff(color.highlight("S") .. "ingle user:",
core.su);
end,
func = function()
core.setSingleUser();
end,
alias = {"s", "S"}
},
-- verbose boot
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff(color.highlight("V") .. "erbose :",
core.verbose);
end,
func = function()
core.setVerbose();
end,
alias = {"v", "V"}
-- acpi
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff(color.highlight("A") .. "CPI :",
core.acpi);
end,
func = function()
core.setACPI();
end,
alias = {"a", "A"}
},
-- safe mode
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff("Safe " .. color.highlight("M") ..
"ode :", core.sm);
end,
func = function()
core.setSafeMode();
end,
alias = {"m", "M"}
},
-- single user
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff(color.highlight("S") .. "ingle user:",
core.su);
end,
func = function()
core.setSingleUser();
end,
alias = {"s", "S"}
},
-- verbose boot
{
entry_type = core.MENU_ENTRY,
name = function()
return OnOff(color.highlight("V") .. "erbose :",
core.verbose);
end,
func = function()
core.setVerbose();
end,
alias = {"v", "V"}
},
},
};
menu.welcome = {
-- boot multi user
{
entry_type = core.MENU_ENTRY,
name = function()
return color.highlight("B") .. "oot Multi user " ..
color.highlight("[Enter]");
end,
func = function()
core.setSingleUser(false);
core.boot();
end,
alias = {"b", "B"}
},
entries = {
-- boot multi user
{
entry_type = core.MENU_ENTRY,
name = function()
return color.highlight("B") .. "oot Multi user " ..
color.highlight("[Enter]");
end,
func = function()
core.setSingleUser(false);
core.boot();
end,
alias = {"b", "B"}
},
-- boot single user
{
entry_type = core.MENU_ENTRY,
name = function()
return "Boot " .. color.highlight("S") .. "ingle user";
end,
func = function()
core.setSingleUser(true);
core.boot();
end,
alias = {"s", "S"}
},
-- boot single user
{
entry_type = core.MENU_ENTRY,
name = function()
return "Boot " .. color.highlight("S") .. "ingle user";
end,
func = function()
core.setSingleUser(true);
core.boot();
end,
alias = {"s", "S"}
},
-- escape to interpreter
{
entry_type = core.MENU_RETURN,
name = function()
return color.highlight("Esc") .. "ape to loader prompt";
end,
func = function()
loader.setenv("autoboot_delay", "NO");
end,
alias = {core.KEYSTR_ESCAPE}
},
-- escape to interpreter
{
entry_type = core.MENU_RETURN,
name = function()
return color.highlight("Esc") .. "ape to loader prompt";
end,
func = function()
loader.setenv("autoboot_delay", "NO");
end,
alias = {core.KEYSTR_ESCAPE}
},
-- reboot
{
entry_type = core.MENU_ENTRY,
name = function()
return color.highlight("R") .. "eboot";
end,
func = function()
loader.perform("reboot");
end,
alias = {"r", "R"}
},
-- reboot
{
entry_type = core.MENU_ENTRY,
name = function()
return color.highlight("R") .. "eboot";
end,
func = function()
loader.perform("reboot");
end,
alias = {"r", "R"}
},
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "";
end
},
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "Options:";
end
},
-- kernel options
{
entry_type = core.MENU_CAROUSEL_ENTRY,
carousel_id = "kernel",
items = core.kernelList,
name = function(idx, choice, all_choices)
if (#all_choices == 0) then
return "Kernel: ";
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "";
end
},
local is_default = (idx == 1);
local kernel_name = "";
local name_color;
if (is_default) then
name_color = color.escapef(color.GREEN);
kernel_name = "default/";
else
name_color = color.escapef(color.BLUE);
{
entry_type = core.MENU_SEPARATOR,
name = function()
return "Options:";
end
kernel_name = kernel_name .. name_color .. choice ..
color.default();
return color.highlight("K").."ernel: " .. kernel_name ..
" (" .. idx ..
" of " .. #all_choices .. ")";
end,
func = function(idx, choice, all_choices)
config.selectkernel(choice);
end,
alias = {"k", "K"}
},
-- kernel options
{
entry_type = core.MENU_CAROUSEL_ENTRY,
carousel_id = "kernel",
items = core.kernelList,
name = function(idx, choice, all_choices)
if (#all_choices == 0) then
return "Kernel: ";
end
local is_default = (idx == 1);
local kernel_name = "";
local name_color;
if (is_default) then
name_color = color.escapef(color.GREEN);
kernel_name = "default/";
else
name_color = color.escapef(color.BLUE);
end
kernel_name = kernel_name .. name_color .. choice ..
color.default();
return color.highlight("K").."ernel: " .. kernel_name ..
" (" .. idx ..
" of " .. #all_choices .. ")";
end,
func = function(idx, choice, all_choices)
config.selectkernel(choice);
end,
alias = {"k", "K"}
},
-- boot options
{
entry_type = core.MENU_SUBMENU,
name = function()
return "Boot " .. color.highlight("O") .. "ptions";
end,
submenu = function()
return menu.boot_options;
end,
alias = {"o", "O"}
},
},
-- boot options
{
entry_type = core.MENU_SUBMENU,
name = function()
return "Boot " .. color.highlight("O") .. "ptions";
end,
submenu = function()
return menu.boot_options;
end,
alias = {"o", "O"}
}
};
-- The first item in every carousel is always the default item.