Font menu: open on page with currently selected font

Generic feature added to TouchMenu: an optional callback
'open_on_menu_item_id_func()' set on an items table can
tell which menu item should be shown when opening a menu.
TouchMenu: allows jumping to first or last page with
long-press on the chevrons.
reviewable/pr7492/r1
poire-z 3 years ago
parent 8fb6ae715b
commit 247085ad3e

@ -96,9 +96,13 @@ function ReaderFont:init()
end, end,
checked_func = function() checked_func = function()
return v == self.font_face return v == self.font_face
end end,
menu_item_id = v,
}) })
end end
self.face_table.open_on_menu_item_id_func = function()
return self.font_face
end
self.ui.menu:registerToMainMenu(self) self.ui.menu:registerToMainMenu(self)
end end
@ -332,7 +336,9 @@ function ReaderFont:addToMainMenu(menu_items)
self.face_table.max_per_page = 5 self.face_table.max_per_page = 5
-- insert table to main reader menu -- insert table to main reader menu
menu_items.change_font = { menu_items.change_font = {
text = self.font_menu_title, text_func = function()
return T(_("Font: %1"), BD.wrap(self.font_face))
end,
sub_item_table = self.face_table, sub_item_table = self.face_table,
} }
end end

@ -499,12 +499,14 @@ function TouchMenu:init()
self.page_info_left_chev = Button:new{ self.page_info_left_chev = Button:new{
icon = chevron_left, icon = chevron_left,
callback = function() self:onPrevPage() end, callback = function() self:onPrevPage() end,
hold_callback = function() self:onFirstPage() end,
bordersize = 0, bordersize = 0,
show_parent = self.show_parent, show_parent = self.show_parent,
} }
self.page_info_right_chev = Button:new{ self.page_info_right_chev = Button:new{
icon = chevron_right, icon = chevron_right,
callback = function() self:onNextPage() end, callback = function() self:onNextPage() end,
hold_callback = function() self:onLastPage() end,
bordersize = 0, bordersize = 0,
show_parent = self.show_parent, show_parent = self.show_parent,
} }
@ -787,6 +789,18 @@ function TouchMenu:onPrevPage()
return true return true
end end
function TouchMenu:onFirstPage()
self.page = 1
self:updateItems()
return true
end
function TouchMenu:onLastPage()
self.page = self.page_num
self:updateItems()
return true
end
function TouchMenu:onSwipe(arg, ges_ev) function TouchMenu:onSwipe(arg, ges_ev)
local direction = BD.flipDirectionIfMirroredUILayout(ges_ev.direction) local direction = BD.flipDirectionIfMirroredUILayout(ges_ev.direction)
if direction == "west" then if direction == "west" then
@ -838,6 +852,16 @@ function TouchMenu:onMenuSelect(item)
table.insert(self.item_table_stack, self.item_table) table.insert(self.item_table_stack, self.item_table)
self.item_table = sub_item_table self.item_table = sub_item_table
self.page = 1 self.page = 1
if self.item_table.open_on_menu_item_id_func then
self:_recalculatePageLayout() -- we need an accurate self.perpage
local open_id = self.item_table.open_on_menu_item_id_func()
for i = 1, #self.item_table do
if self.item_table[i].menu_item_id == open_id then
self.page = math.floor( (i - 1) / self.perpage ) + 1
break
end
end
end
self:updateItems() self:updateItems()
end end
end end

Loading…
Cancel
Save