add a dog-ear-like icon at the above right corner of bookmarked page

And tap the above right corner will toggle the bookmark on this page on/off.
pull/2/merge
chrox 11 years ago
parent 781821b883
commit 3dfa9aa51d

@ -18,13 +18,13 @@ end
function ReaderBookmark:initGesListener()
self.ges_events = {
AddBookmark = {
ToggleBookmark = {
GestureRange:new{
ges = "double_tap",
ges = "tap",
range = Geom:new{
x = Screen:getWidth()/2, y = 0,
w = Screen:getWidth()/2,
h = Screen:getHeight()/2
x = Screen:getWidth()*7/8, y = 0,
w = Screen:getWidth()/8,
h = Screen:getHeight()/8
}
}
},
@ -46,25 +46,35 @@ function ReaderBookmark:onSetDimensions(dimen)
end
end
function ReaderBookmark:onAddBookmark()
function ReaderBookmark:onToggleBookmark()
local pn_or_xp = nil
if self.ui.document.getXPointer then
pn_or_xp = self.ui.document:getXPointer()
else
pn_or_xp = self.view.state.page
end
self:toggleBookmark(pn_or_xp)
self.view.dogear_visible = not self.view.dogear_visible
UIManager:setDirty(self.view.dialog, "partial")
end
local noti_text = "Bookmark added."
if not self:addBookmark(pn_or_xp) then
noti_text = "Page already marked!"
function ReaderBookmark:setDogearVisibility(pn_or_xp)
if self:isBookmarked(pn_or_xp) then
self.ui:handleEvent(Event:new("SetDogearVisibility", true))
else
self.ui:handleEvent(Event:new("SetDogearVisibility", false))
end
UIManager:show(Notification:new{
text = noti_text,
timeout = 3
})
return true
end
function ReaderBookmark:onPageUpdate(pageno)
self:setDogearVisibility(pageno)
end
function ReaderBookmark:onPosUpdate(pos)
-- TODO: cannot check if this pos is bookmarked or not.
end
function ReaderBookmark:onShowBookmark()
-- build up item_table
for k, v in ipairs(self.bookmarks) do
@ -119,16 +129,16 @@ function ReaderBookmark:addToMainMenu(item_table)
})
end
--[[
return nil if page already marked, otherwise, return true
for CREngine, bookmark page is xpointer instead of page number
--]]
function ReaderBookmark:addBookmark(pn_or_xp)
function ReaderBookmark:isBookmarked(pn_or_xp)
for k,v in ipairs(self.bookmarks) do
if v.page == pn_or_xp then
return nil
return true
end
end
return false
end
function ReaderBookmark:addBookmark(pn_or_xp)
-- build notes from TOC
local notes = self.ui.toc:getTocTitleByPage(pn_or_xp)
if notes ~= "" then
@ -144,10 +154,18 @@ function ReaderBookmark:addBookmark(pn_or_xp)
return self:isBookmarkInSequence(a, b)
end)
return true
end
end
function ReaderBookmark:isBookmarkInSequence(a, b)
return a.page < b.page
end
function ReaderBookmark:toggleBookmark(pn_or_xp)
for k,v in ipairs(self.bookmarks) do
if v.page == pn_or_xp then
table.remove(self.bookmarks, k)
return
end
end
self:addBookmark(pn_or_xp)
end

@ -0,0 +1,16 @@
ReaderDogear = RightContainer:new{}
function ReaderDogear:init()
local widget = ImageWidget:new{
file = "resources/icons/dogear.png",
}
local icon_size = widget:getSize()
self.dimen = Geom:new{w = Screen:getWidth(), h = icon_size.h}
self[1] = widget
end
function ReaderDogear:onSetDogearVisibility(visible)
self.view.dogear_visible = visible
return true
end

@ -22,7 +22,7 @@ function ReaderMenu:initGesListener()
ges = "tap",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
w = Screen:getWidth()*7/8,
h = Screen:getHeight()/4,
}
}

@ -1,6 +1,7 @@
require "ui/reader/readerfooter"
require "ui/reader/readerdogear"
ReaderView = WidgetContainer:new{
ReaderView = OverlapGroup:new{
_name = "ReaderView",
document = nil,
@ -26,19 +27,24 @@ ReaderView = WidgetContainer:new{
-- dimen for area to dim
dim_area = Geom:new{w = 0, h = 0},
-- has footer
footer_visible = nil,
footer_visible = false,
-- has dogear
dogear_visible = false,
}
function ReaderView:resetFooter()
if self.footer_visible then
self.footer = ReaderFooter:new{
view = self,
}
self[1] = self.footer
else
self.footer = nil
self[1] = nil
end
function ReaderView:init()
self:resetLayout()
end
function ReaderView:resetLayout()
self.dogear = ReaderDogear:new{
view = self,
}
self.footer = ReaderFooter:new{
view = self,
}
self[1] = self.dogear
self[2] = self.footer
end
function ReaderView:paintTo(bb, x, y)
@ -95,8 +101,12 @@ function ReaderView:paintTo(bb, x, y)
self.dim_area.w, self.dim_area.h
)
end
-- paint dogear
if self.dogear_visible then
self.dogear:paintTo(bb, x, y)
end
-- paint footer
if self.footer then
if self.footer_visible then
self.footer:paintTo(bb, x, y)
end
end
@ -176,9 +186,9 @@ end
function ReaderView:onSetDimensions(dimensions)
--DEBUG("set dimen", dimensions)
self:resetFooter()
self:resetLayout()
self.dimen = dimensions
if self.footer then
if self.footer_visible then
self.dimen.h = dimensions.h - self.footer.height
end
-- recalculate view
@ -187,7 +197,7 @@ end
function ReaderView:onRestoreDimensions(dimensions)
--DEBUG("restore dimen", dimensions)
self:resetFooter()
self:resetLayout()
self.dimen = dimensions
-- recalculate view
self:recalculate()
@ -213,7 +223,7 @@ function ReaderView:onReadSettings(config)
else
self.footer_visible = full_screen == 0 and true or false
end
self:resetFooter()
self:resetLayout()
end
function ReaderView:onPageUpdate(new_page_no)

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Loading…
Cancel
Save