Merge pull request #547 from chrox/master

highlight current toc entry
pull/551/head v2014.04.05-nightly
Qingping Hou 10 years ago
commit 87f69291e1

@ -95,21 +95,21 @@ function ReaderBookmark:onShowBookmark()
end
v.text = "Page "..page.." "..v.notes.." @ "..v.datetime
end
local menu_container = CenterContainer:new{
dimen = Screen:getSize(),
}
local bm_menu = Menu:new{
title = "Bookmarks",
item_table = self.bookmarks,
width = Screen:getWidth()-50,
height = Screen:getHeight()-50,
width = Screen:getWidth(),
height = Screen:getHeight(),
show_parent = menu_container,
is_borderless = true,
}
local menu_container = CenterContainer:new{
dimen = Screen:getSize(),
bm_menu,
}
table.insert(menu_container, bm_menu)
-- buid up menu widget method as closure
local doc = self.ui.document
local view = self.view

@ -16,6 +16,7 @@ local Font = require("ui/font")
local DEBUG = require("dbg")
local ReaderFooter = InputContainer:new{
mode = 1,
visible = true,
pageno = nil,
pages = nil,
@ -85,7 +86,7 @@ end
function ReaderFooter:updateFooterPage()
if type(self.pageno) ~= "number" then return end
self.progress_bar.percentage = self.pageno / self.pages
if self.show_time then
self.progress_text.text = os.date("%H:%M")
else
@ -96,7 +97,7 @@ end
function ReaderFooter:updateFooterPos()
if type(self.position) ~= "number" then return end
self.progress_bar.percentage = self.position / self.doc_height
if self.show_time then
self.progress_text.text = os.date("%H:%M")
else
@ -116,6 +117,23 @@ function ReaderFooter:onPosUpdate(pos)
self:updateFooterPos()
end
function ReaderFooter:applyFooterMode()
-- three modes switcher for reader footer
-- 0 for footer off
-- 1 for footer page info
-- 2 for footer time info
if self.mode == 0 then
self.view.footer_visible = false
else
self.view.footer_visible = true
end
if self.mode == 1 then
self.show_time = false
elseif self.mode == 2 then
self.show_time = true
end
end
function ReaderFooter:onTapFooter(arg, ges)
if self.view.flipping_visible then
local pos = ges.pos
@ -123,7 +141,8 @@ function ReaderFooter:onTapFooter(arg, ges)
local percentage = (pos.x - dimen.x)/dimen.w
self.ui:handleEvent(Event:new("GotoPercentage", percentage))
else
self.show_time = not self.show_time
self.mode = (self.mode + 1) % 3
self:applyFooterMode()
end
if self.pageno then
self:updateFooterPage()
@ -131,10 +150,7 @@ function ReaderFooter:onTapFooter(arg, ges)
self:updateFooterPos()
end
UIManager:setDirty(self.view.dialog, "partial")
-- consume this tap when footer is visible
if self.view.footer_visible then
return true
end
return true
end
function ReaderFooter:onHoldFooter(arg, ges)

@ -53,6 +53,10 @@ function ReaderToc:onUpdateToc()
return true
end
function ReaderToc:onPageUpdate(pageno)
self.pageno = pageno
end
function ReaderToc:fillToc()
self.toc = self.ui.document:getToc()
end
@ -103,21 +107,31 @@ function ReaderToc:onShowToc()
v.mandatory = v.page
end
end
local menu_container = CenterContainer:new{
dimen = Screen:getSize(),
}
-- update current entry
if #self.toc > 0 then
for i=1, #self.toc do
v = self.toc[i]
if v.page > self.pageno then
self.toc.current = i > 1 and i - 1 or 1
break
end
end
end
local toc_menu = Menu:new{
title = _("Table of Contents"),
item_table = self.toc,
ui = self.ui,
width = Screen:getWidth()-50,
height = Screen:getHeight()-50,
width = Screen:getWidth(),
height = Screen:getHeight(),
show_parent = menu_container,
is_borderless = true,
}
table.insert(menu_container, toc_menu)
local menu_container = CenterContainer:new{
dimen = Screen:getSize(),
toc_menu,
}
function toc_menu:onMenuChoice(item)
self.ui:handleEvent(Event:new("PageUpdate", item.page))

@ -160,7 +160,7 @@ function MenuItem:init()
local mandatory = self.mandatory and ""..self.mandatory.." " or ""
local mandatory_w = RenderText:sizeUtf8Text(0, self.dimen.w, self.info_face, ""..mandatory, true).x
w = RenderText:sizeUtf8Text(0, self.dimen.w, self.face, self.text, true).x
if w + mandatory_w >= self.content_width then
if Device:isTouchDevice() then
@ -174,20 +174,22 @@ function MenuItem:init()
self.text = RenderText:getSubTextByWidth(self.text, self.face,
self.content_width - indicator_w - mandatory_w, true) .. indicator
end
local text_container = LeftContainer:new{
dimen = Geom:new{w = self.content_width, h = self.dimen.h},
TextWidget:new{
text = self.text,
face = self.face,
bold = self.bold,
}
}
local mandatory_container = RightContainer:new{
dimen = Geom:new{w = self.content_width, h = self.dimen.h},
TextWidget:new{
text = mandatory,
face = self.info_face,
bold = self.bold,
}
}
@ -283,6 +285,7 @@ local Menu = FocusManager:new{
width = 500,
-- height will be calculated according to item number if not given
height = nil,
header_padding = Screen:scaleByDPI(10),
dimen = Geom:new{},
item_table = {},
item_shortcuts = {
@ -322,7 +325,7 @@ function Menu:_recalculateDimen()
w = self.dimen.w,
h = Screen:scaleByDPI(46), -- hardcoded for now
}
self.perpage = math.floor((self.dimen.h - self.dimen.x) / self.item_dimen.h) - 2
self.perpage = math.floor((self.dimen.h - self.dimen.y - self.header_padding) / self.item_dimen.h) - 2
self.page_num = math.ceil(#self.item_table / self.perpage)
end
@ -370,7 +373,10 @@ function Menu:init()
self.page_info_right_chev
}
local header = self.title_bar
local header = VerticalGroup:new{
VerticalSpan:new{width = self.header_padding},
self.title_bar,
}
local body = self.item_group
local footer = BottomContainer:new{
dimen = self.dimen:copy(),
@ -462,6 +468,7 @@ function Menu:init()
if #self.item_table > 0 then
-- if the table is not yet initialized, this call
-- must be done manually:
self.page = math.ceil((self.item_table.current or 1) / self.perpage)
self:updateItems(1)
end
end
@ -500,6 +507,7 @@ function Menu:updateItems(select_number)
show_parent = self.show_parent,
text = self.item_table[i].text,
mandatory = self.item_table[i].mandatory,
bold = self.item_table.current == i,
face = self.cface,
dimen = self.item_dimen:new(),
shortcut = item_shortcut,

@ -1 +1 @@
Subproject commit 5c126ed088bb57afa125cde82d601d1ef2acc4d3
Subproject commit 14f92c89257527ef77f2dfd52e92181276c96452
Loading…
Cancel
Save