From 3056bf440c26550bb8ac9fba087b7044aa87bc9a Mon Sep 17 00:00:00 2001 From: Tigran Aivazian Date: Fri, 21 Sep 2012 23:05:19 +0100 Subject: [PATCH 1/5] Fix for TOC breakage for crengine-related files. In UniReader:showToc() function we cannot use goto() by page number but have to use self:gotoTocEntry() because crereader defines its own CREReader:gotoTocEntry() method which uses "xpointer" field of the TOC entry for this purpose. With this fix the TOC navigation in crengine-related files works correctly, BUT after each jump you have to press Menu to refresh the page for some reason (adding explicit self:redrawCurrentPage() in the code before gotoTocEntry() doesn't help). This seems to be an unrelated problem to do with cr3 caching or something else. I will try to investigate it as well, but for now I am committing the fix for the TOC side of the problem. --- unireader.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/unireader.lua b/unireader.lua index ba3ed8342..5e4263714 100644 --- a/unireader.lua +++ b/unireader.lua @@ -1798,12 +1798,13 @@ function UniReader:showToc() local ret_code, item_no, all = toc_menu:choose(0, fb.bb:getHeight()) if ret_code then -- normal item selection -- check to make sure the destination is local - local pagenum = self.toc[self.toc_curidx_to_x[ret_code]].page + local toc_entry = self.toc[self.toc_curidx_to_x[ret_code]] + local pagenum = toc_entry.page if pagenum < 1 or pagenum > self.doc:getPages() then showInfoMsgWithDelay("External links unsupported", 1500, 1) self.toc_curitem = ret_code else - return self:goto(pagenum) + return self:gotoTocEntry(toc_entry) end elseif item_no then -- expand or collapse item local abs_item_no = math.abs(item_no) From de96f30efffb1c4cb4f2c34536a43b983c763392 Mon Sep 17 00:00:00 2001 From: Tigran Aivazian Date: Sat, 22 Sep 2012 09:40:13 +0100 Subject: [PATCH 2/5] Prove CREReader:showMenu() method because the generic UniReader:showMenu() method invokes :cleanCache() method which is non-existent for CREReader object and causes a crash if you press C after pressing Menu while viewing any of crereader-handled files (fb2, epub, etc.) --- crereader.lua | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/crereader.lua b/crereader.lua index d5745d247..34b6b24d8 100644 --- a/crereader.lua +++ b/crereader.lua @@ -405,6 +405,20 @@ function CREReader:_drawReadingInfo() blitbuffer.progressBar(fb.bb, 10, ypos, G_width - 20, 15, 5, 4, load_percent/100, 8) end +function UniReader:showMenu() + self:_drawReadingInfo() + fb:refresh(1) + while true do + local ev = input.saveWaitForEvent() + ev.code = adjustKeyEvents(ev) + if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then + if ev.code == KEY_BACK or ev.code == KEY_MENU then + return + end + end + end +end + function CREReader:adjustCreReaderCommands() -- delete commands self.commands:delGroup("[joypad]") From a9f4dd3b1f5fc085f9f4e7e38ca997905a057ec2 Mon Sep 17 00:00:00 2001 From: Tigran Aivazian Date: Sat, 22 Sep 2012 10:51:00 +0100 Subject: [PATCH 3/5] The second part of the TOC/crereader fix. Redraw the current page when selecting a TOC entry. Otherwise the correct page is shown only after the next Menu press or anything else that does current page redraw, e.g. Shift-R. --- crereader.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/crereader.lua b/crereader.lua index 34b6b24d8..1a92c4701 100644 --- a/crereader.lua +++ b/crereader.lua @@ -206,6 +206,7 @@ end function CREReader:gotoTocEntry(entry) self:goto(entry.xpointer, nil, "xpointer") + self:redrawCurrentPage() end function CREReader:nextView() From 8b2143561e7e3eb77acf9230e7f52b0758e921c0 Mon Sep 17 00:00:00 2001 From: Tigran Aivazian Date: Sat, 22 Sep 2012 12:41:19 +0100 Subject: [PATCH 4/5] Avoid printing long messages in the SelectMenu footer. Bind Alt-H to show the help page with all the active hotkeys. Thanks to NuPogodi for the suggestion. --- selectmenu.lua | 61 +++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/selectmenu.lua b/selectmenu.lua index 9d54ee961..9207c8010 100644 --- a/selectmenu.lua +++ b/selectmenu.lua @@ -82,7 +82,7 @@ end function SelectMenu:addAllCommands() self.commands = Commands:new{} - self.commands:add(KEY_FW_UP, nil, "", + self.commands:add(KEY_FW_UP, nil, "joypad up", "previous item", function(sm) if sm.current == 1 then @@ -97,7 +97,7 @@ function SelectMenu:addAllCommands() end end ) - self.commands:add(KEY_FW_DOWN, nil, "", + self.commands:add(KEY_FW_DOWN, nil, "joypad down", "next item", function(sm) if sm.current == sm.perpage then @@ -115,7 +115,7 @@ function SelectMenu:addAllCommands() end end ) - self.commands:add({KEY_PGFWD, KEY_LPGFWD}, nil, "", + self.commands:add({KEY_PGFWD, KEY_LPGFWD}, nil, "next", "next page", function(sm) if sm.page < (sm.items / sm.perpage) then @@ -130,7 +130,7 @@ function SelectMenu:addAllCommands() end end ) - self.commands:add({KEY_PGBCK, KEY_LPGBCK}, nil, "", + self.commands:add({KEY_PGBCK, KEY_LPGBCK}, nil, "prev", "previous page", function(sm) if sm.page > 1 then @@ -142,8 +142,8 @@ function SelectMenu:addAllCommands() end end ) - self.commands:add(KEY_FW_PRESS, nil, "", - "select menu item", + self.commands:add(KEY_FW_PRESS, nil, "joypad center", + "select item", function(sm) if sm.items == 0 then return "break" @@ -153,8 +153,8 @@ function SelectMenu:addAllCommands() end ) if self.deletable then - self.commands:add(KEY_DEL, nil, "", - "delete menu item", + self.commands:add(KEY_DEL, nil, "Del", + "delete item", function(sm) self.selected_item = (sm.perpage * (sm.page - 1) + sm.current) return "delete" @@ -162,21 +162,21 @@ function SelectMenu:addAllCommands() ) end if self.expandable then - self.commands:add(KEY_FW_RIGHT, nil, "", - "expand menu item", + self.commands:add(KEY_FW_RIGHT, nil, "joypad right", + "expand item", function(sm) self.selected_item = (sm.perpage * (sm.page - 1) + sm.current) return "expand" end ) - self.commands:add(KEY_FW_LEFT, nil, "", - "collapse menu item", + self.commands:add(KEY_FW_LEFT, nil, "joypad left", + "collapse item", function(sm) self.selected_item = (sm.perpage * (sm.page - 1) + sm.current) return "collapse" end ) - self.commands:add(KEY_FW_RIGHT, MOD_SHIFT, "", + self.commands:add(KEY_FW_RIGHT, MOD_SHIFT, "joypad right", "expand all subitems", function(sm) self.selected_item = (sm.perpage * (sm.page - 1) + sm.current) @@ -189,7 +189,7 @@ function SelectMenu:addAllCommands() table.insert(KEY_Q_to_P, Keydef:new(i, nil, "")) end self.commands:addGroup("Q to P", KEY_Q_to_P, - "Select menu item with Q to E key as shortcut", + "Select item with Q to E key as shortcut", function(sm, keydef) sm.selected_item = sm:getItemIndexByShortCut( sm.item_shortcuts[ keydef.keycode - KEY_Q + 1 ], sm.perpage) @@ -200,7 +200,7 @@ function SelectMenu:addAllCommands() table.insert(KEY_A_to_L, Keydef:new(i, nil, "")) end self.commands:addGroup("A to L", KEY_A_to_L, - "Select menu item with A to L key as shortcut", + "Select item with A to L key as shortcut", function(sm, keydef) sm.selected_item = sm:getItemIndexByShortCut( sm.item_shortcuts[ keydef.keycode - KEY_A + 11 ], sm.perpage) @@ -211,42 +211,48 @@ function SelectMenu:addAllCommands() table.insert(KEY_Z_to_M, Keydef:new(i, nil, "")) end self.commands:addGroup("Z to M", KEY_Z_to_M, - "Select menu item with Z to M key as shortcut", + "Select item with Z to M key as shortcut", function(sm, keydef) sm.selected_item = sm:getItemIndexByShortCut( sm.item_shortcuts[ keydef.keycode - KEY_Z + 21 ], sm.perpage) end ) self.commands:add(KEY_SLASH, nil, "/", - "Select menu item with / key as shortcut", + "Select item with / key as shortcut", function(sm) sm.selected_item = sm:getItemIndexByShortCut("/", sm.perpage) end ) - self.commands:add(KEY_DOT, nil, "", - "Select menu item with dot key as shortcut", + self.commands:add(KEY_DOT, nil, ".", + "Select item with dot key as shortcut", function(sm) sm.selected_item = sm:getItemIndexByShortCut(".", sm.perpage) end ) - self.commands:add(KEY_SYM, nil, "", - "Select menu item with sym key as shortcut", + self.commands:add(KEY_SYM, nil, "Sym", + "Select item with Sym key as shortcut", function(sm) sm.selected_item = sm:getItemIndexByShortCut("Sym", sm.perpage) end ) - self.commands:add(KEY_ENTER, nil, "", - "Select menu item with enter key as shortcut", + self.commands:add(KEY_ENTER, nil, "Enter", + "Select item with Enter key as shortcut", function(sm) sm.selected_item = sm:getItemIndexByShortCut("Ent", sm.perpage) end ) - self.commands:add(KEY_BACK, nil, "", + self.commands:add(KEY_BACK, nil, "Back", "Exit menu", function(sm) return "break" end ) + self.commands:add(KEY_H,MOD_ALT,"H", + "show help page", + function(sm) + HelpPage:show(0, G_height, sm.commands) + sm.pagedirty = true + end) end function SelectMenu:clearCommands() @@ -346,12 +352,7 @@ function SelectMenu:choose(ypos, height) end -- for c=1, self.perpage end -- if self.items == 0 - local footer = "Page "..self.page.." of "..(math.ceil(self.items / self.perpage)) - if self.expandable then - footer = footer.." (Right/Left to expand/collapse, Shift-Right to expand all subitems)" - elseif self.deletable then - footer = footer.." (Use Del key to delete item)" - end + local footer = "Page "..self.page.." of "..(math.ceil(self.items / self.perpage)).." Press Alt-H for help" renderUtf8Text(fb.bb, self.margin_H, height-7, fface, footer, true) end From 2c021d9d4e26ff442c8eb608d87bcabad7889ad5 Mon Sep 17 00:00:00 2001 From: Tigran Aivazian Date: Sat, 22 Sep 2012 18:33:09 +0100 Subject: [PATCH 5/5] Corrected the showMenu() function to belong to the right object! UniReader -> CREReader in crereader.lua. --- crereader.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crereader.lua b/crereader.lua index 1a92c4701..368e0cd2d 100644 --- a/crereader.lua +++ b/crereader.lua @@ -406,7 +406,7 @@ function CREReader:_drawReadingInfo() blitbuffer.progressBar(fb.bb, 10, ypos, G_width - 20, 15, 5, 4, load_percent/100, 8) end -function UniReader:showMenu() +function CREReader:showMenu() self:_drawReadingInfo() fb:refresh(1) while true do