add sub menu support for menu widget

pull/2/merge
Qingping Hou 12 years ago
parent 4d3e6af106
commit 793a431c43

@ -158,6 +158,7 @@ Menu = FocusManager:new{
"A", "S", "D", "F", "G", "H", "J", "K", "L", "Del",
"Z", "X", "C", "V", "B", "N", "M", ".", "Sym", "Enter",
},
item_table_stack = {},
is_enable_shortcut = true,
item_dimen = nil,
@ -195,6 +196,10 @@ function Menu:init()
end
self.key_events.Select = { {"Press"}, doc = "select current menu item"}
self.menu_title = TextWidget:new{
text = self.title,
face = self.tface,
}
-- group for items
self.item_group = VerticalGroup:new{}
self.page_info = TextWidget:new{
@ -202,10 +207,7 @@ function Menu:init()
}
local content = VerticalGroup:new{
TextWidget:new{
text = self.title,
face = self.tface,
},
self.menu_title,
self.item_group,
self.page_info,
} -- VerticalGroup
@ -286,6 +288,12 @@ function Menu:updateItems(select_number)
UIManager:setDirty(self)
end
function Menu:swithItemTable(new_title, new_item_table)
self.menu_title.text = new_title
self.item_table = new_item_table
self:updateItems(1)
end
function Menu:onSelectByShortCut(_, keyevent)
for k,v in ipairs(self.item_shortcuts) do
if k > self.perpage then
@ -323,8 +331,15 @@ end
override this function to process the item selected in a different manner
]]--
function Menu:onMenuSelect(item)
UIManager:close(self)
self:onMenuChoice(item)
if item.sub_item_table == nil then
UIManager:close(self)
self:onMenuChoice(item)
else
-- save menu title for later resume
self.item_table.title = self.title
table.insert(self.item_table_stack, self.item_table)
self:swithItemTable(item.text, item.sub_item_table)
end
return true
end
@ -363,7 +378,14 @@ function Menu:onSelect()
end
function Menu:onClose()
UIManager:close(self)
local table_length = #self.item_table_stack
if table_length == 0 then
UIManager:close(self)
else
-- back to parent menu
parent_item_table = table.remove(self.item_table_stack, table_length)
self:swithItemTable(parent_item_table.title, parent_item_table)
end
return true
end

@ -7,6 +7,18 @@ ReaderMenu = InputContainer:new{
function ReaderMenu:onShowMenu()
local item_table = {}
table.insert(item_table, {
text = "Switch zoom mode",
sub_item_table = {
{
text = "Zoom to fit content width",
},
{
text = "Zoom to fit content height",
},
}
})
table.insert(item_table, {
text = "Return to file browser"
})

Loading…
Cancel
Save