diff --git a/frontend/document/document.lua b/frontend/document/document.lua index e4527c15d..3d96d7592 100644 --- a/frontend/document/document.lua +++ b/frontend/document/document.lua @@ -92,6 +92,10 @@ function Document:getPageDimensions(pageno, zoom, rotation) return native_dimen end +function Document:getToc() + return self._document:getToc() +end + -- load implementations: require "document/pdfdocument" diff --git a/frontend/ui/reader/readertoc.lua b/frontend/ui/reader/readertoc.lua new file mode 100644 index 000000000..815b6003b --- /dev/null +++ b/frontend/ui/reader/readertoc.lua @@ -0,0 +1,36 @@ +ReaderToc = InputContainer:new{ + key_events = { + ShowToc = { {"T"}, doc = "show Table of Content menu"}, + }, + dimen = Geom:new{ w = G_width-20, h = G_height-20}, +} + +function ReaderToc:cleanUpTocTitle(title) + return title:gsub("\13", "") +end + +function ReaderToc:onSetDimensions(dimen) + self.dimen = dimen +end + +function ReaderToc:onShowToc() + function callback(item) + self.ui:handleEvent(Event:new("PageUpdate", item.page)) + end + + local items = self.ui.document:getToc() + -- build menu items + for _,v in ipairs(items) do + v.text = (" "):rep(v.depth-1)..self:cleanUpTocTitle(v.title) + end + toc_menu = Menu:new{ + title = "Table of Contents", + item_table = items, + width = self.dimen.w, + height = self.dimen.h, + on_select_callback = callback, + } + + UIManager:show(toc_menu) +end + diff --git a/frontend/ui/readerui.lua b/frontend/ui/readerui.lua index 30b18d75d..593f24293 100644 --- a/frontend/ui/readerui.lua +++ b/frontend/ui/readerui.lua @@ -4,6 +4,7 @@ require "ui/reader/readerzooming" require "ui/reader/readerpanning" require "ui/reader/readerrotation" require "ui/reader/readerpaging" +require "ui/reader/readertoc" --[[ This is an abstraction for a reader interface @@ -54,6 +55,12 @@ function ReaderUI:init() view = self[1], ui = self } + -- Toc menu controller + self[5] = ReaderToc:new{ + dialog = self.dialog, + view = self[1], + ui = self + } -- if needed, insert a paging container if self.document.info.has_pages then local pager = ReaderPaging:new{