mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
@@ -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,
|
||||
}
|
||||
|
||||
table.insert(menu_container, bm_menu)
|
||||
|
||||
|
||||
local menu_container = CenterContainer:new{
|
||||
dimen = Screen:getSize(),
|
||||
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,
|
||||
|
||||
Submodule koreader-base updated: 5c126ed088...14f92c8925
Reference in New Issue
Block a user