Virtual keyboard: default layout, compact mode (#8142)

pull/8148/head
hius07 3 years ago committed by GitHub
parent 39b810a3bd
commit 32d61c7878
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -8,13 +8,23 @@ local VerticalGroup = require("ui/widget/verticalgroup")
local VirtualKeyboard = require("ui/widget/virtualkeyboard")
local _ = require("gettext")
local input_dialog, check_button_bold, check_button_border
local input_dialog, check_button_bold, check_button_border, check_button_compact
local sub_item_table = {
{
text = _("Keyboard layout"),
sub_item_table = {},
},
{
text = _("Remember last layout"),
checked_func = function()
return G_reader_settings:nilOrTrue("keyboard_remember_layout")
end,
callback = function()
G_reader_settings:flipNilOrTrue("keyboard_remember_layout")
end,
separator = true,
},
{
text = _("Keyboard font size"),
keep_menu_open = true,
@ -40,6 +50,7 @@ local sub_item_table = {
G_reader_settings:saveSetting("keyboard_key_font_size", font_size)
G_reader_settings:saveSetting("keyboard_key_bold", check_button_bold.checked)
G_reader_settings:saveSetting("keyboard_key_border", check_button_border.checked)
G_reader_settings:saveSetting("keyboard_key_compact", check_button_compact.checked)
input_dialog._input_widget:onCloseKeyboard()
input_dialog._input_widget:initKeyboard()
input_dialog:onShowKeyboard()
@ -69,6 +80,15 @@ local sub_item_table = {
check_button_border:toggleCheck()
end,
}
check_button_compact = CheckButton:new{
text = _("compact"),
checked = G_reader_settings:isTrue("keyboard_key_compact"),
parent = input_dialog,
max_width = input_dialog._input_widget.width,
callback = function()
check_button_compact:toggleCheck()
end,
}
local checkbox_shift = math.floor((input_dialog.width - input_dialog._input_widget.width) / 2 + 0.5)
local check_buttons = HorizontalGroup:new{
@ -77,6 +97,7 @@ local sub_item_table = {
align = "left",
check_button_bold,
check_button_border,
check_button_compact,
},
}
@ -90,11 +111,16 @@ local sub_item_table = {
},
}
for k, _ in FFIUtil.orderedPairs(VirtualKeyboard.lang_to_keyboard_layout) do
local selected_layouts_count = 0
local _keyboard_layouts = G_reader_settings:readSetting("keyboard_layouts") or {}
for k, __ in FFIUtil.orderedPairs(VirtualKeyboard.lang_to_keyboard_layout) do
if _keyboard_layouts[k] == true then
selected_layouts_count = selected_layouts_count + 1
end
table.insert(sub_item_table[1].sub_item_table, {
text_func = function()
local text = Language:getLanguageName(k)
if VirtualKeyboard:getKeyboardLayout() == k then
if G_reader_settings:readSetting("keyboard_layout_default") == k then
text = text .. ""
end
return text
@ -105,11 +131,25 @@ for k, _ in FFIUtil.orderedPairs(VirtualKeyboard.lang_to_keyboard_layout) do
end,
callback = function()
local keyboard_layouts = G_reader_settings:readSetting("keyboard_layouts") or {}
keyboard_layouts[k] = not keyboard_layouts[k]
if keyboard_layouts[k] == true then
keyboard_layouts[k] = false
selected_layouts_count = selected_layouts_count - 1
else
if selected_layouts_count < 4 then
keyboard_layouts[k] = true
selected_layouts_count = selected_layouts_count + 1
else -- no more space in the 'globe' popup
UIManager:show(require("ui/widget/infomessage"):new{
text = _("Up to four layouts can be enabled."),
timeout = 2,
})
return
end
end
G_reader_settings:saveSetting("keyboard_layouts", keyboard_layouts)
end,
hold_callback = function(touchmenu_instance)
G_reader_settings:saveSetting("keyboard_layout", k)
G_reader_settings:saveSetting("keyboard_layout_default", k)
if touchmenu_instance then touchmenu_instance:updateItems() end
end,
})

@ -27,6 +27,7 @@ local KeyboardLayoutDialog = InputContainer:new{
title = _("Keyboard layout"),
modal = true,
stop_events_propagation = true,
keyboard_state = nil,
width = math.floor(Screen:getWidth() * 0.8),
face = Font:getFace("cfont", 22),
title_face = Font:getFace("x_smalltfont"),
@ -58,15 +59,26 @@ function KeyboardLayoutDialog:init()
local buttons = {}
local radio_buttons = {}
local keyboard_layouts = G_reader_settings:readSetting("keyboard_layouts") or {}
self.keyboard_state.force_current_layout = true
for k, _ in FFIUtil.orderedPairs(self.parent.keyboard.lang_to_keyboard_layout) do
local text = Language:getLanguageName(k) .. " (" .. string.sub(k, 1, 2) .. ")"
if keyboard_layouts[k] == true then
text = text .. ""
end
if k == G_reader_settings:readSetting("keyboard_layout_default") then
text = text .. ""
end
table.insert(radio_buttons, {
{
text = Language:getLanguageName(k),
text = text,
checked = self.parent.keyboard:getKeyboardLayout() == k,
provider = k,
},
})
end
self.keyboard_state.force_current_layout = false
table.insert(buttons, {
{

@ -25,6 +25,10 @@ local logger = require("logger")
local util = require("util")
local Screen = Device.screen
local keyboard_state = {
force_current_layout = false, -- Set to true to get/set current layout (instead of default layout)
}
local VirtualKeyPopup
local VirtualKey = InputContainer:new{
@ -61,17 +65,12 @@ function VirtualKey:init()
self.key_chars = self:genkeyboardLayoutKeyChars()
self.callback = function ()
local current = G_reader_settings:readSetting("keyboard_layout")
local default = G_reader_settings:readSetting("keyboard_layout_default")
local keyboard_layouts = G_reader_settings:readSetting("keyboard_layouts") or {}
local enabled = false
local next_layout = nil
for k, v in FFIUtil.orderedPairs(keyboard_layouts) do
if enabled and v == true then
next_layout = k
break
end
if k == current then
enabled = true
end
if not keyboard_layouts[current] and current ~= default then
next_layout = default
end
if not next_layout then
for k, v in FFIUtil.orderedPairs(keyboard_layouts) do
@ -79,6 +78,17 @@ function VirtualKey:init()
next_layout = k
break
end
if k == current then
enabled = true
end
end
end
if not next_layout then
for k, v in FFIUtil.orderedPairs(keyboard_layouts) do
if v == true then
next_layout = k
break
end
end
end
if next_layout then
@ -86,13 +96,14 @@ function VirtualKey:init()
end
end
self.hold_callback = function()
if util.tableSize(self.key_chars) > 5 then
if util.tableSize(self.key_chars) > 5 then -- 2 or more layouts enabled
self.popup = VirtualKeyPopup:new{
parent_key = self,
}
else
self.keyboard_layout_dialog = KeyboardLayoutDialog:new{
parent = self,
keyboard_state = keyboard_state,
}
UIManager:show(self.keyboard_layout_dialog)
end
@ -290,6 +301,7 @@ function VirtualKey:genkeyboardLayoutKeyChars()
UIManager:close(self.popup)
self.keyboard_layout_dialog = KeyboardLayoutDialog:new{
parent = self,
keyboard_state = keyboard_state,
}
UIManager:show(self.keyboard_layout_dialog)
end,
@ -766,7 +778,8 @@ function VirtualKeyboard:init()
self.symbolmode_keys = keyboard.symbolmode_keys
self.utf8mode_keys = keyboard.utf8mode_keys
self.umlautmode_keys = keyboard.umlautmode_keys
self.height = Screen:scaleBySize(64 * #self.KEYS)
local keys_height = G_reader_settings:isTrue("keyboard_key_compact") and 48 or 64
self.height = Screen:scaleBySize(keys_height * #self.KEYS)
self.min_layer = keyboard.min_layer
self.max_layer = keyboard.max_layer
self:initLayer(self.keyboard_layer)
@ -784,10 +797,16 @@ function VirtualKeyboard:init()
end
function VirtualKeyboard:getKeyboardLayout()
if G_reader_settings:isFalse("keyboard_remember_layout") and not keyboard_state.force_current_layout then
local lang = G_reader_settings:readSetting("keyboard_layout_default")
or G_reader_settings:readSetting("keyboard_layout") or "en"
G_reader_settings:saveSetting("keyboard_layout", lang)
end
return G_reader_settings:readSetting("keyboard_layout") or G_reader_settings:readSetting("language")
end
function VirtualKeyboard:setKeyboardLayout(layout)
keyboard_state.force_current_layout = true
local prev_keyboard_height = self.dimen and self.dimen.h
G_reader_settings:saveSetting("keyboard_layout", layout)
self:init()
@ -800,6 +819,7 @@ function VirtualKeyboard:setKeyboardLayout(layout)
else
self:_refresh(true)
end
keyboard_state.force_current_layout = false
end
function VirtualKeyboard:onClose()

Loading…
Cancel
Save