@ -3,6 +3,7 @@ local FFIUtil = require("ffi/util")
local Language = require ( " ui/language " )
local Language = require ( " ui/language " )
local UIManager = require ( " ui/uimanager " )
local UIManager = require ( " ui/uimanager " )
local VirtualKeyboard = require ( " ui/widget/virtualkeyboard " )
local VirtualKeyboard = require ( " ui/widget/virtualkeyboard " )
local dbg = require ( " dbg " )
local util = require ( " util " )
local util = require ( " util " )
local _ = require ( " gettext " )
local _ = require ( " gettext " )
@ -94,29 +95,33 @@ local sub_item_table = {
input_dialog : onShowKeyboard ( )
input_dialog : onShowKeyboard ( )
end ,
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 , {
table.insert ( sub_item_table [ 1 ] . sub_item_table , {
text_func = function ( )
text_func = function ( )
local text = Language : getLanguageName ( k )
local text = Language : getLanguageName ( lang )
if G_reader_settings : readSetting ( " keyboard_layout_default " ) == k then
if G_reader_settings : readSetting ( " keyboard_layout_default " ) == lang then
text = text .. " ★ "
text = text .. " ★ "
end
end
return text
return text
end ,
end ,
checked_func = function ( )
checked_func = function ( )
local keyboard_layouts = G_reader_settings : readSetting ( " keyboard_layouts " ) or { }
local keyboard_layouts = G_reader_settings : readSetting ( " keyboard_layouts " ) or { }
return util.arrayContains ( keyboard_layouts , k )
return util.arrayContains ( keyboard_layouts , lang )
end ,
end ,
callback = function ( )
callback = function ( )
local keyboard_layouts = G_reader_settings : readSetting ( " keyboard_layouts " ) or { }
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
if layout_index then
table.remove ( keyboard_layouts , layout_index )
table.remove ( keyboard_layouts , layout_index )
else
else
if # keyboard_layouts < 4 then
if # keyboard_layouts < 4 then
table.insert ( keyboard_layouts , k )
table.insert ( keyboard_layouts , lang )
else -- no more space in the 'globe' popup
else -- no more space in the 'globe' popup
UIManager : show ( require ( " ui/widget/infomessage " ) : new {
UIManager : show ( require ( " ui/widget/infomessage " ) : new {
text = _ ( " Up to four layouts can be enabled. " ) ,
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 )
G_reader_settings : saveSetting ( " keyboard_layouts " , keyboard_layouts )
end ,
end ,
hold_callback = function ( touchmenu_instance )
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
if touchmenu_instance then touchmenu_instance : updateItems ( ) end
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
end
return sub_item_table
return sub_item_table