mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Kindle4NT improvements (#3745)
* [device][kindle4] add fake event to kindle4 * modify focusmanager to allow for more complex layout The focusmanager now naviguate the layout by avoiding nil value instead of relying on table lenght. It should be completely backward compatible * add Dpad naviguation to the touchmenu * fix crash because virtualkeyboard on non touch device the kindle4NT has no keyboard nor touch, the fix open the virtual keyboard so koreader dont crash but it's not useable * Enable device with keys to use the touchmenu * Don't get stuck in reader progress statistics plugin * [underlinecontainer] Fix and remove unused function References #1898.
This commit is contained in:
committed by
Frans de Jonge
parent
9849d89f0e
commit
e8aab49ee9
@@ -6,6 +6,8 @@ local Button = require("ui/widget/button")
|
||||
local CenterContainer = require("ui/widget/container/centercontainer")
|
||||
local CheckMark = require("ui/widget/checkmark")
|
||||
local Device = require("device")
|
||||
local Event = require("ui/event")
|
||||
local FocusManager = require("ui/widget/focusmanager")
|
||||
local Font = require("ui/font")
|
||||
local FrameContainer = require("ui/widget/container/framecontainer")
|
||||
local Geom = require("ui/geometry")
|
||||
@@ -20,12 +22,14 @@ local RightContainer = require("ui/widget/container/rightcontainer")
|
||||
local Size = require("ui/size")
|
||||
local TextWidget = require("ui/widget/textwidget")
|
||||
local UIManager = require("ui/uimanager")
|
||||
local UnderlineContainer = require("ui/widget/container/underlinecontainer")
|
||||
local VerticalGroup = require("ui/widget/verticalgroup")
|
||||
local VerticalSpan = require("ui/widget/verticalspan")
|
||||
local util = require("ffi/util")
|
||||
local _ = require("gettext")
|
||||
local Screen = Device.screen
|
||||
local getMenuText = require("util").getMenuText
|
||||
local Input = Device.input
|
||||
local Screen = Device.screen
|
||||
|
||||
--[[
|
||||
TouchMenuItem widget
|
||||
@@ -97,7 +101,27 @@ function TouchMenuItem:init()
|
||||
},
|
||||
},
|
||||
}
|
||||
self[1] = self.item_frame
|
||||
|
||||
self._underline_container = UnderlineContainer:new{
|
||||
vertical_align = "center",
|
||||
dimen =self.dimen,
|
||||
self.item_frame
|
||||
}
|
||||
|
||||
self[1] = self._underline_container
|
||||
function self:isEnabled()
|
||||
return item_enabled ~= false and true
|
||||
end
|
||||
end
|
||||
|
||||
function TouchMenuItem:onFocus()
|
||||
self._underline_container.color = Blitbuffer.COLOR_BLACK
|
||||
return true
|
||||
end
|
||||
|
||||
function TouchMenuItem:onUnfocus()
|
||||
self._underline_container.color = Blitbuffer.COLOR_WHITE
|
||||
return true
|
||||
end
|
||||
|
||||
function TouchMenuItem:onTapSelect(arg, ges)
|
||||
@@ -202,9 +226,11 @@ function TouchMenuBar:init()
|
||||
callback = nil,
|
||||
padding_left = icon_padding,
|
||||
padding_right = icon_padding,
|
||||
menu = self.menu,
|
||||
}
|
||||
|
||||
table.insert(self.icon_widgets, ib)
|
||||
table.insert(self.menu.layout, ib) -- for the focusmanager
|
||||
|
||||
-- we have to use local variable here for closure callback
|
||||
local _start_seg = end_seg + icon_sep_width
|
||||
@@ -319,7 +345,7 @@ end
|
||||
--[[
|
||||
TouchMenu widget for hierarchical menus
|
||||
--]]
|
||||
local TouchMenu = InputContainer:new{
|
||||
local TouchMenu = FocusManager:new{
|
||||
tab_item_table = {},
|
||||
-- for returnning in multi-level menus
|
||||
item_table_stack = nil,
|
||||
@@ -351,6 +377,8 @@ function TouchMenu:init()
|
||||
end
|
||||
end
|
||||
|
||||
self.layout = {}
|
||||
|
||||
self.ges_events.TapCloseAllMenus = {
|
||||
GestureRange:new{
|
||||
ges = "tap",
|
||||
@@ -368,7 +396,10 @@ function TouchMenu:init()
|
||||
}
|
||||
}
|
||||
|
||||
self.key_events.Close = { {"Back"}, doc = "close touch menu" }
|
||||
self.key_events.Back = { {"Back"}, doc = "back to upper menu or close touchmenu" }
|
||||
self.key_events.NextPage = { {Input.group.PgFwd}, doc = "next page" }
|
||||
self.key_events.PrevPage = { {Input.group.PgBack}, doc = "previous page" }
|
||||
self.key_events.Press = { {"Press"}, doc = "chose selected item" }
|
||||
|
||||
local icons = {}
|
||||
for _,v in ipairs(self.tab_item_table) do
|
||||
@@ -509,7 +540,9 @@ function TouchMenu:updateItems()
|
||||
local old_dimen = self.dimen and self.dimen:copy()
|
||||
self:_recalculatePageLayout()
|
||||
self.item_group:clear()
|
||||
self.layout = {}
|
||||
table.insert(self.item_group, self.bar)
|
||||
table.insert(self.layout, self.bar.icon_widgets) --for the focusmanager
|
||||
|
||||
for c = 1, self.perpage do
|
||||
-- calculate index in item_table
|
||||
@@ -526,6 +559,9 @@ function TouchMenu:updateItems()
|
||||
show_parent = self.show_parent,
|
||||
}
|
||||
table.insert(self.item_group, item_tmp)
|
||||
if item_tmp:isEnabled() then
|
||||
table.insert(self.layout, {[self.cur_tab] = item_tmp}) --for the focusmanager
|
||||
end
|
||||
if item.separator and c ~= self.perpage then
|
||||
-- insert split line
|
||||
table.insert(self.item_group, self.split_line)
|
||||
@@ -553,6 +589,7 @@ function TouchMenu:updateItems()
|
||||
-- recalculate dimen based on new layout
|
||||
self.dimen.w = self.width
|
||||
self.dimen.h = self.item_group:getSize().h + self.bordersize*2 + self.padding*2
|
||||
self.selected = { x = self.cur_tab, y = 1 } --reset the position of the focusmanager
|
||||
|
||||
UIManager:setDirty("all", function()
|
||||
local refresh_dimen =
|
||||
@@ -707,4 +744,12 @@ function TouchMenu:onClose()
|
||||
self:closeMenu()
|
||||
end
|
||||
|
||||
function TouchMenu:onBack()
|
||||
self:backToUpperMenu()
|
||||
end
|
||||
|
||||
function TouchMenu:onPress()
|
||||
self:getFocusItem():handleEvent(Event:new("TapSelect"))
|
||||
end
|
||||
|
||||
return TouchMenu
|
||||
|
||||
Reference in New Issue
Block a user