readerview(feat): add registerViewModule method

pull/2454/head
Qingping Hou 7 years ago
parent 0f931517ba
commit ead5dfd9b4

@ -87,7 +87,7 @@ local footerTextGeneratorMap = {
end,
}
local ReaderFooter = WidgetContainer:new{
local ReaderFooter = WidgetContainer:extend{
mode = MODE.page_progress,
pageno = nil,
pages = nil,
@ -510,6 +510,7 @@ end
ReaderFooter.onUpdatePos = ReaderFooter.updateFooter
function ReaderFooter:onReaderReady()
self.ui.menu:registerToMainMenu(self)
self:setupTouchZones()
self:resetLayout() -- set widget dimen
self:setTocMarkers()

@ -1,3 +1,7 @@
--[[--
ReaderView module handles all the screen painting for document browsing.
]]
local AlphaContainer = require("ui/widget/container/alphacontainer")
local ReaderFlipping = require("apps/reader/modules/readerflipping")
local ReaderFooter = require("apps/reader/modules/readerfooter")
@ -13,7 +17,7 @@ local dbg = require("dbg")
local Blitbuffer = require("ffi/blitbuffer")
local _ = require("gettext")
local ReaderView = OverlapGroup:new{
local ReaderView = OverlapGroup:extend{
document = nil,
-- single page state
@ -75,14 +79,12 @@ local ReaderView = OverlapGroup:new{
}
function ReaderView:init()
self.view_modules = {}
-- fix recalculate from close document pageno
self.state.page = nil
-- fix inherited dim_area for following opened documents
self:resetDimArea()
self:addWidgets()
self.ui:registerPostInitCallback(function()
self.ui.menu:registerToMainMenu(self.footer)
end)
self.emitHintPageEvent = function()
self.ui:handleEvent(Event:new("HintPage", self.hinting))
end
@ -116,10 +118,37 @@ function ReaderView:addWidgets()
self[3] = self.flipping
end
--[[--
Register a view UI widget module for document browsing.
@tparam string name module name, registered widget can be accessed by readerui.view.view_modules[name].
@tparam ui.widget.widget.Widget widget paintable widget, i.e. has a paintTo method.
@usage
local ImageWidget = require("ui/widget/imagewidget")
local dummy_image = ImageWidget:new{
file = "resources/icons/appbar.control.expand.png",
}
-- the image will be painted on all book pages
readerui.view:registerViewModule('dummy_image', dummy_image)
]]
function ReaderView:registerViewModule(name, widget)
if not widget.paintTo then
print(name .. " view module does not have paintTo method!")
return
end
widget.view = self
widget.ui = self.ui
self.view_modules[name] = widget
end
function ReaderView:resetLayout()
for i, widget in ipairs(self) do
for _, widget in ipairs(self) do
widget:resetLayout()
end
for _, m in pairs(self.view_modules) do
if m.resetLayout then m:resetLayout() end
end
end
function ReaderView:paintTo(bb, x, y)
@ -177,6 +206,9 @@ function ReaderView:paintTo(bb, x, y)
if self.flipping_visible then
self.flipping:paintTo(bb, x, y)
end
for _, m in pairs(self.view_modules) do
m:paintTo(bb, x, y)
end
-- stop activity indicator
self.ui:handleEvent(Event:new("StopActivityIndicator"))
end

@ -1,4 +1,4 @@
local InputContainer = require("ui/widget/container/inputcontainer")
local Widget = require("ui/widget/widget")
local MultiInputDialog = require("ui/widget/multiinputdialog")
local KeyValuePage = require("ui/widget/keyvaluepage")
local UIManager = require("ui/uimanager")
@ -20,7 +20,7 @@ local statistics_dir = DataStorage:getDataDir() .. "/statistics/"
-- a copy of page_max_read_sec
local page_max_time
local ReaderStatistics = InputContainer:new {
local ReaderStatistics = Widget:extend{
is_doc_only = true,
last_time = nil,
page_min_read_sec = 5,

Loading…
Cancel
Save