mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
menu: keyboard_layout: add ability for layout-specific settings
A layout might want to make some specific feature configurable, so create an addToMainMenu-like system for allowing layouts to add their own configuration sub-menu to the keyboard configuration menu. Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
This commit is contained in:
@@ -3,6 +3,7 @@ local FFIUtil = require("ffi/util")
|
||||
local Language = require("ui/language")
|
||||
local UIManager = require("ui/uimanager")
|
||||
local VirtualKeyboard = require("ui/widget/virtualkeyboard")
|
||||
local dbg = require("dbg")
|
||||
local util = require("util")
|
||||
local _ = require("gettext")
|
||||
|
||||
@@ -94,29 +95,33 @@ local sub_item_table = {
|
||||
input_dialog:onShowKeyboard()
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Layout-specific keyboard settings"),
|
||||
sub_item_table = {},
|
||||
}
|
||||
}
|
||||
|
||||
for k, __ in FFIUtil.orderedPairs(VirtualKeyboard.lang_to_keyboard_layout) do
|
||||
for lang, keyboard_layout in FFIUtil.orderedPairs(VirtualKeyboard.lang_to_keyboard_layout) do
|
||||
table.insert(sub_item_table[1].sub_item_table, {
|
||||
text_func = function()
|
||||
local text = Language:getLanguageName(k)
|
||||
if G_reader_settings:readSetting("keyboard_layout_default") == k then
|
||||
local text = Language:getLanguageName(lang)
|
||||
if G_reader_settings:readSetting("keyboard_layout_default") == lang then
|
||||
text = text .. " ★"
|
||||
end
|
||||
return text
|
||||
end,
|
||||
checked_func = function()
|
||||
local keyboard_layouts = G_reader_settings:readSetting("keyboard_layouts") or {}
|
||||
return util.arrayContains(keyboard_layouts, k)
|
||||
return util.arrayContains(keyboard_layouts, lang)
|
||||
end,
|
||||
callback = function()
|
||||
local keyboard_layouts = G_reader_settings:readSetting("keyboard_layouts") or {}
|
||||
local layout_index = util.arrayContains(keyboard_layouts, k)
|
||||
local layout_index = util.arrayContains(keyboard_layouts, lang)
|
||||
if layout_index then
|
||||
table.remove(keyboard_layouts, layout_index)
|
||||
else
|
||||
if #keyboard_layouts < 4 then
|
||||
table.insert(keyboard_layouts, k)
|
||||
table.insert(keyboard_layouts, lang)
|
||||
else -- no more space in the 'globe' popup
|
||||
UIManager:show(require("ui/widget/infomessage"):new{
|
||||
text = _("Up to four layouts can be enabled."),
|
||||
@@ -128,10 +133,19 @@ for k, __ in FFIUtil.orderedPairs(VirtualKeyboard.lang_to_keyboard_layout) do
|
||||
G_reader_settings:saveSetting("keyboard_layouts", keyboard_layouts)
|
||||
end,
|
||||
hold_callback = function(touchmenu_instance)
|
||||
G_reader_settings:saveSetting("keyboard_layout_default", k)
|
||||
G_reader_settings:saveSetting("keyboard_layout_default", lang)
|
||||
if touchmenu_instance then touchmenu_instance:updateItems() end
|
||||
end,
|
||||
})
|
||||
if VirtualKeyboard.lang_has_submenu[lang] then
|
||||
local keyboard = require("ui/data/keyboardlayouts/" .. keyboard_layout)
|
||||
if dbg.dassert(keyboard.genMenuItems ~= nil) then
|
||||
table.insert(sub_item_table[4].sub_item_table, {
|
||||
text = Language:getLanguageName(lang),
|
||||
sub_item_table = keyboard:genMenuItems(),
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return sub_item_table
|
||||
|
||||
@@ -761,6 +761,10 @@ local VirtualKeyboard = FocusManager:new{
|
||||
ru = "ru_keyboard",
|
||||
tr = "tr_keyboard",
|
||||
},
|
||||
|
||||
lang_has_submenu = {
|
||||
ja = true,
|
||||
},
|
||||
}
|
||||
|
||||
function VirtualKeyboard:init()
|
||||
|
||||
Reference in New Issue
Block a user