From 4c6420abba8bf7070e2abb7f7e960a91134a20b9 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Wed, 9 Jan 2013 16:53:32 +0800 Subject: [PATCH] fix: retrieve toc when page or height of document is changed --- frontend/ui/reader/readerrolling.lua | 1 + frontend/ui/reader/readertoc.lua | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/frontend/ui/reader/readerrolling.lua b/frontend/ui/reader/readerrolling.lua index 4d920a174..6904c3b40 100644 --- a/frontend/ui/reader/readerrolling.lua +++ b/frontend/ui/reader/readerrolling.lua @@ -179,6 +179,7 @@ function ReaderRolling:onUpdatePos() self:gotoXPointer(self.ui.document:getXPointer()) self.old_doc_height = new_height self.old_page = new_page + self.ui:handleEvent(Event:new("UpdateToc")) end return true end diff --git a/frontend/ui/reader/readertoc.lua b/frontend/ui/reader/readertoc.lua index 1c7b9407f..4b5e2cee6 100644 --- a/frontend/ui/reader/readertoc.lua +++ b/frontend/ui/reader/readertoc.lua @@ -1,4 +1,5 @@ ReaderToc = InputContainer:new{ + toc = nil, toc_menu_title = "Table of contents", } @@ -21,6 +22,11 @@ function ReaderToc:onSetDimensions(dimen) self.dimen = dimen end +function ReaderToc:onUpdateToc() + self.toc = nil + return true +end + function ReaderToc:fillToc() self.toc = self.ui.document:getToc() end @@ -61,15 +67,19 @@ function ReaderToc:getTocTitleOfCurrentPage() end function ReaderToc:onShowToc() - local items = self.ui.document:getToc() + if not self.toc then + self:fillToc() + end -- build menu items - for _,v in ipairs(items) do - v.text = (" "):rep(v.depth-1)..self:cleanUpTocTitle(v.title) + if self.toc and not self.toc[1].text then + for _,v in ipairs(self.toc) do + v.text = (" "):rep(v.depth-1)..self:cleanUpTocTitle(v.title) + end end local toc_menu = Menu:new{ title = "Table of Contents", - item_table = items, + item_table = self.toc, ui = self.ui, width = Screen:getWidth()-20, height = Screen:getHeight(),