diff --git a/frontend/ui/menu.lua b/frontend/ui/menu.lua index 9a7b2c5ab..dce6565bd 100644 --- a/frontend/ui/menu.lua +++ b/frontend/ui/menu.lua @@ -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 diff --git a/frontend/ui/reader/readermenu.lua b/frontend/ui/reader/readermenu.lua index 411c69d1e..833f8f04b 100644 --- a/frontend/ui/reader/readermenu.lua +++ b/frontend/ui/reader/readermenu.lua @@ -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" })