support goto relative page number

We can input relative page number now in the reader goto dialog.
Goto "+4" will page forward 4 pages and goto "-4" will page
backward 4 pages.

This implements #1437.
pull/1448/head
chrox 9 years ago
parent ea76d91ed4
commit 992e769aaf

@ -31,7 +31,7 @@ function ReaderGoto:onShowGotoDialog()
title = self.goto_dialog_title, title = self.goto_dialog_title,
input_hint = "(1 - "..self.document:getPageCount()..")", input_hint = "(1 - "..self.document:getPageCount()..")",
buttons = { buttons = {
{ {
{ {
text = _("Cancel"), text = _("Cancel"),
enabled = true, enabled = true,
@ -50,15 +50,13 @@ function ReaderGoto:onShowGotoDialog()
text = _("Location"), text = _("Location"),
enabled = not self.document.info.has_pages, enabled = not self.document.info.has_pages,
callback = function() callback = function()
self:gotoLocation() self:gotoPage()
end, end,
}, },
}, },
}, },
input_type = "number", input_type = "number",
enter_callback = self.document.info.has_pages enter_callback = function() self:gotoPage() end,
and function() self:gotoPage() end
or function() self:gotoLocation() end,
width = Screen:getWidth() * 0.8, width = Screen:getWidth() * 0.8,
height = Screen:getHeight() * 0.2, height = Screen:getHeight() * 0.2,
} }
@ -72,21 +70,17 @@ function ReaderGoto:close()
end end
function ReaderGoto:gotoPage() function ReaderGoto:gotoPage()
local number = tonumber(self.goto_dialog:getInputText()) local page_number = self.goto_dialog:getInputText()
if number then local relative_sign = page_number:sub(1, 1)
self.ui:handleEvent(Event:new("GotoPage", number)) local number = tonumber(page_number)
end
self:close()
return true
end
function ReaderGoto:gotoLocation()
local number = tonumber(self.goto_dialog:getInputText())
if number then if number then
self.ui:handleEvent(Event:new("GotoPage", number)) if relative_sign == "+" or relative_sign == "-" then
self.ui:handleEvent(Event:new("GotoRelativePage", number))
else
self.ui:handleEvent(Event:new("GotoPage", number))
end
self:close()
end end
self:close()
return true
end end
return ReaderGoto return ReaderGoto

@ -799,6 +799,11 @@ function ReaderPaging:onGotoPage(number)
return true return true
end end
function ReaderPaging:onGotoRelativePage(number)
self:gotoPage(self.current_page + number)
return true
end
function ReaderPaging:onGotoPercentage(percentage) function ReaderPaging:onGotoPercentage(percentage)
if percentage < 0 then percentage = 0 end if percentage < 0 then percentage = 0 end
if percentage > 1 then percentage = 1 end if percentage > 1 then percentage = 1 end

@ -331,6 +331,14 @@ function ReaderRolling:onGotoPage(number)
return true return true
end end
function ReaderRolling:onGotoRelativePage(number)
if number then
self:gotoPage(self.current_page + number)
end
self.xpointer = self.ui.document:getXPointer()
return true
end
function ReaderRolling:onGotoXPointer(xp) function ReaderRolling:onGotoXPointer(xp)
self:gotoXPointer(xp) self:gotoXPointer(xp)
self.xpointer = xp self.xpointer = xp

Loading…
Cancel
Save