mod: add notes in jumpstack

NOTE that the jumpstack maintaining strategy has
been changed in this commit compared to commit #15
and #31. Now current viewing page in kept in the
stack to preserve the notes.
pull/2/merge
Qingping Hou 12 years ago
parent ca3a712521
commit 989e915c8f

@ -63,6 +63,7 @@ UniReader = {
cache_current_memsize = 0,
cache = {},
jump_stack = {},
toc = nil,
}
function UniReader:new(o)
@ -302,13 +303,28 @@ end
--[[
@ pageno is the page you want to add to jump_stack
--]]
function UniReader:add_jump(pageno)
function UniReader:add_jump(pageno, notes)
local jump_item = nil
-- move pageno page to jump_stack to jump_stack top if already in
local notes_to_add = notes
if not notes_to_add then
-- no notes given, auto generate from TOC entry
notes_to_add = self:getTOCTitleByPage(self.pageno)
if notes_to_add ~= "" then
notes_to_add = "in "..notes_to_add
end
end
-- move pageno page to jump_stack top if already in
for _t,_v in ipairs(self.jump_stack) do
if _v.page == pageno then
jump_item = _v
table.remove(self.jump_stack, _t)
-- if original notes is not empty, probably defined by users,
-- we use the original notes to overwrite auto generated notes
-- from TOC entry
if jump_item.notes ~= "" then
notes_to_add = jump_item.notes
end
jump_item.notes = notes or notes_to_add
break
end
end
@ -317,6 +333,7 @@ function UniReader:add_jump(pageno)
jump_item = {
page = pageno,
datetime = os.date("%Y-%m-%d %H:%M:%S"),
notes = notes_to_add,
}
end
@ -345,8 +362,6 @@ function UniReader:goto(no)
-- for jump_stack, distinguish jump from normal page turn
if self.pageno and math.abs(self.pageno - no) > 1 then
-- the page we jumped to should not be shown in stack, remove it
self:del_jump(no)
self:add_jump(self.pageno)
end
@ -392,11 +407,33 @@ function UniReader:setrotate(rotate)
self:goto(self.pageno)
end
function UniReader:fillTOC()
self.toc = self.doc:getTOC()
end
function UniReader:getTOCTitleByPage(pageno)
if not self.toc then
-- build toc when needed.
self:fillTOC()
end
for _k,_v in ipairs(self.toc) do
if _v.page >= pageno then
--@TODO clean up special characters in title 05.03 2012
return _v.title
end
end
return ""
end
function UniReader:showTOC()
toc = self.doc:getTOC()
if not self.toc then
-- build toc when needed.
self:fillTOC()
end
local menu_items = {}
-- build menu items
for _k,_v in ipairs(toc) do
for _k,_v in ipairs(self.toc) do
table.insert(menu_items,
(" "):rep(_v.depth-1).._v.title)
end
@ -407,7 +444,7 @@ function UniReader:showTOC()
}
item_no = toc_menu:choose(0, fb.bb:getHeight())
if item_no then
self:goto(toc[item_no].page)
self:goto(self.toc[item_no].page)
else
self:goto(self.pageno)
end
@ -417,7 +454,7 @@ function UniReader:showJumpStack()
local menu_items = {}
for _k,_v in ipairs(self.jump_stack) do
table.insert(menu_items,
_v.datetime.." -> Page ".._v.page)
_v.datetime.." -> Page ".._v.page.." ".._v.notes)
end
jump_menu = SelectMenu:new{
menu_title = "Jump Keeper (current page: "..self.pageno..")",
@ -606,7 +643,9 @@ function UniReader:inputloop()
end
end
-- do clean up stuff
self:clearcache()
self.toc = nil
if self.doc ~= nil then
self.doc:close()
end

Loading…
Cancel
Save