From 4242cc96865050abdf124f58f50e43c9738278d8 Mon Sep 17 00:00:00 2001 From: Tigran Aivazian Date: Sun, 9 Sep 2012 19:46:24 +0100 Subject: [PATCH] Allow deleting bookmarks. --- selectmenu.lua | 32 ++++++++++++++++++++++---------- unireader.lua | 31 ++++++++++++++++++++----------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/selectmenu.lua b/selectmenu.lua index 2fa9793ea..e6bc01300 100644 --- a/selectmenu.lua +++ b/selectmenu.lua @@ -31,7 +31,7 @@ SelectMenu = { item_shortcuts = { "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", - "A", "S", "D", "F", "G", "H", "J", "K", "L", "Del", + "A", "S", "D", "F", "G", "H", "J", "K", "L", "/", "Z", "X", "C", "V", "B", "N", "M", ".", "Sym", "Ent", }, last_shortcut = 0, @@ -44,6 +44,8 @@ SelectMenu = { commands = nil, expandable = false, -- if true handle Right/Left FW selector keys + deletable = false, -- if true handle Del key as a request to delete item + -- note that currently expandable and deletable are mutually exclusive -- NuPogodi, 30.08.12: define font to render menu items own_glyph = 0, -- render menu items with default "cfont" @@ -150,6 +152,15 @@ function SelectMenu:addAllCommands() end end ) + if self.deletable then + self.commands:add(KEY_DEL, nil, "", + "delete menu item", + function(sm) + self.selected_item = (sm.perpage * (sm.page - 1) + sm.current) + return "delete" + end + ) + end if self.expandable then self.commands:add(KEY_FW_RIGHT, nil, "", "expand menu item", @@ -199,10 +210,10 @@ function SelectMenu:addAllCommands() sm.item_shortcuts[ keydef.keycode - KEY_Z + 21 ], sm.perpage) end ) - self.commands:add(KEY_DEL, nil, "", - "Select menu item with del key as shortcut", + self.commands:add(KEY_SLASH, nil, "/", + "Select menu item with / key as shortcut", function(sm) - sm.selected_item = sm:getItemIndexByShortCut("Del", sm.perpage) + sm.selected_item = sm:getItemIndexByShortCut("/", sm.perpage) end ) self.commands:add(KEY_DOT, nil, "", @@ -211,10 +222,9 @@ function SelectMenu:addAllCommands() sm.selected_item = sm:getItemIndexByShortCut(".", sm.perpage) end ) - self.commands:add({KEY_SYM, KEY_SLASH}, nil, "", - "Select menu item with sym/slash key as shortcut", + self.commands:add(KEY_SYM, nil, "", + "Select menu item with sym key as shortcut", function(sm) - -- DXG has slash after dot sm.selected_item = sm:getItemIndexByShortCut("Sym", sm.perpage) end ) @@ -331,7 +341,9 @@ function SelectMenu:choose(ypos, height) local footer = "Page "..self.page.." of "..(math.ceil(self.items / self.perpage)) if self.expandable then - footer = footer.." (Use Right/Left FW-selector keys to expand/collapse nodes)" + footer = footer.." (Use Right/Left FW-selector keys to expand/collapse items)" + elseif self.deletable then + footer = footer.." (Use Del key to delete item)" end renderUtf8Text(fb.bb, self.margin_H, height-7, fface, footer, true) end @@ -380,12 +392,12 @@ function SelectMenu:choose(ypos, height) if self.selected_item ~= nil then if self.expandable then if ret_code == "expand" then - Debug("# expand "..self.selected_item) return nil, self.selected_item elseif ret_code == "collapse" then - Debug("# collapse "..self.selected_item) return nil, -self.selected_item end + elseif self.deletable and ret_code == "delete" then + return nil, self.selected_item end Debug("# selected "..self.selected_item) return self.selected_item, self.item_array[self.selected_item] diff --git a/unireader.lua b/unireader.lua index 2328d03d7..49ee782c7 100644 --- a/unireader.lua +++ b/unireader.lua @@ -1823,24 +1823,33 @@ end function UniReader:showBookMarks() local menu_items = {} + local ret_code, item_no = -1, -1 + -- build menu items for k,v in ipairs(self.bookmarks) do table.insert(menu_items, "Page "..v.page.." "..v.notes.." @ "..v.datetime) end if #menu_items == 0 then - showInfoMsgWithDelay( - "No bookmark found.", 2000, 1) - else - toc_menu = SelectMenu:new{ + return showInfoMsgWithDelay("No bookmarks found", 1500, 1) + end + while true do + bm_menu = SelectMenu:new{ menu_title = "Bookmarks", item_array = menu_items, + deletable = true, } - item_no = toc_menu:choose(0, fb.bb:getHeight()) - if item_no then - self:goto(self.bookmarks[item_no].page) - else - self:redrawCurrentPage() + ret_code, item_no = bm_menu:choose(0, fb.bb:getHeight()) + if ret_code then -- normal item selection + return self:goto(self.bookmarks[ret_code].page) + elseif item_no then -- delete item + table.remove(menu_items, item_no) + table.remove(self.bookmarks, item_no) + if #menu_items == 0 then + return self:redrawCurrentPage() + end + else -- return via Back + return self:redrawCurrentPage() end end end @@ -2315,9 +2324,9 @@ function UniReader:addAllCommands() function(unireader) ok = unireader:addBookmark(self.pageno) if not ok then - showInfoMsgWithDelay("Page already marked!", 2000, 1) + showInfoMsgWithDelay("Page already marked!", 1500, 1) else - showInfoMsgWithDelay("Page marked.", 2000, 1) + showInfoMsgWithDelay("Page marked", 1500, 1) end end) self.commands:add(KEY_B,MOD_SHIFT,"B",