From 895372f781a4f5d0ddfb315f779c4e414415de2c Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 26 May 2018 19:45:37 +0200 Subject: [PATCH] Show current and default values in config dialog (pdf) (#3973) --- frontend/ui/data/creoptions.lua | 154 +++------------------------- frontend/ui/data/koptoptions.lua | 55 +++++++--- frontend/ui/data/optionsutil.lua | 133 ++++++++++++++++++++++++ frontend/ui/data/strings.lua | 4 + frontend/ui/widget/configdialog.lua | 3 +- 5 files changed, 195 insertions(+), 154 deletions(-) create mode 100644 frontend/ui/data/optionsutil.lua diff --git a/frontend/ui/data/creoptions.lua b/frontend/ui/data/creoptions.lua index 409a30a87..eda07a99c 100644 --- a/frontend/ui/data/creoptions.lua +++ b/frontend/ui/data/creoptions.lua @@ -1,11 +1,8 @@ local Device = require("device") -local InfoMessage = require("ui/widget/infomessage") local S = require("ui/data/strings") -local UIManager = require("ui/uimanager") -local Screen = Device.screen -local T = require("ffi/util").template - +local optionsutil = require("ui/data/optionsutil") local _ = require("gettext") +local Screen = Device.screen -- add multiply operator to Aa dict local Aa = setmetatable({"Aa"}, { @@ -18,125 +15,6 @@ local Aa = setmetatable({"Aa"}, { end }) -local function enable_if_equals(configurable, option, value) - return configurable[option] == value -end - -local function showValues(configurable, option) - local default = G_reader_settings:readSetting("copt_"..option.name) - local current = configurable[option.name] - local value_default, value_current - local suffix = option.name_text_suffix or "" - if option.name == "screen_mode" then - current = Screen:getScreenMode() - end - local arg_table = {} - if option.toggle and option.values then - for i=1,#option.toggle do - arg_table[option.values[i]] = option.toggle[i] - end - end - if not default then - default = "not set" - if option.toggle and option.values then - value_current = current - current = arg_table[current] - end - elseif option.toggle and option.values then - value_current = current - value_default = default - default = arg_table[default] - current = arg_table[current] - end - if option.labels and option.values then - for i=1,#option.labels do - if default == option.values[i] then - default = option.labels[i] - break - end - end - for i=1,#option.labels do - if current == option.values[i] then - current = option.labels[i] - break - end - end - end - if option.name_text_true_values and option.toggle and option.values and value_default then - UIManager:show(InfoMessage:new{ - text = T(_("%1:\nCurrent value: %2 (%5%4)\nDefault value: %3 (%6%4)"), option.name_text, - current, default, suffix, value_current, value_default) - }) - elseif option.name_text_true_values and option.toggle and option.values and not value_default then - UIManager:show(InfoMessage:new{ - text = T(_("%1:\nCurrent value: %2 (%5%4)\nDefault value: %3"), option.name_text, - current, default, suffix, value_current) - }) - else - UIManager:show(InfoMessage:new{ - text = T(_("%1:\nCurrent value: %2%4\nDefault value: %3%4"), option.name_text, current, - default, suffix) - }) - end -end - -local function tableComp(a,b) - if #a ~= #b then return false end - for i=1,#a do - if a[i] ~= b[i] then return false end - end - return true -end - -local function showValuesMargins(configurable, option) - local default = G_reader_settings:readSetting("copt_"..option.name) - local current = configurable[option.name] - local current_string - for i=1,#option.toggle do - if tableComp(current, option.values[i]) then - current_string = option.toggle[i] - break - end - end - if not default then - UIManager:show(InfoMessage:new{ - text = T(_([[ -%1: -Current value: %2 - left: %3 - top: %4 - right: %5 - bottom: %6 -Default value: not set]]), - option.name_text, current_string, current[1], current[2], current[3], current[4]) - }) - else - local default_string - for i=1,#option.toggle do - if tableComp(default, option.values[i]) then - default_string = option.toggle[i] - break - end - end - UIManager:show(InfoMessage:new{ - text = T(_([[ -%1: -Current value: %2 - left: %3 - top: %4 - right: %5 - bottom: %6 -Default value: %7 - left: %8 - top: %9 - right: %10 - bottom: %11]]), - option.name_text, current_string, current[1], current[2], current[3], current[4], - default_string, default[1], default[2], default[3], default[4]) - }) - end -end - local CreOptions = { prefix = 'copt', { @@ -151,7 +29,7 @@ local CreOptions = { default_arg = "portrait", current_func = function() return Screen:getScreenMode() end, event = "ChangeScreenMode", - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, } } }, @@ -167,7 +45,7 @@ local CreOptions = { args = {"scroll", "page"}, default_arg = "page", event = "SetViewMode", - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, }, { name = "line_spacing", @@ -185,7 +63,7 @@ local CreOptions = { DCREREADER_CONFIG_LINE_SPACE_PERCENT_MEDIUM, DCREREADER_CONFIG_LINE_SPACE_PERCENT_LARGE, }, - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, -- used by showValues name_text_suffix = "%", name_text_true_values = true, @@ -206,7 +84,7 @@ local CreOptions = { DCREREADER_CONFIG_MARGIN_SIZES_MEDIUM, DCREREADER_CONFIG_MARGIN_SIZES_LARGE, }, - name_text_hold_callback = showValuesMargins, + name_text_hold_callback = optionsutil.showValuesMargins, }, } }, @@ -232,13 +110,13 @@ local CreOptions = { event = "ChangeSize", args = {"decrease", "increase"}, alternate = false, - name_text_hold_callback = function(configurable) + name_text_hold_callback = function(configurable, __, prefix) local opt = { name = "font_size", name_text = _("Font Size"), } - showValues(configurable, opt) - end + optionsutil.showValues(configurable, opt, prefix) + end, } } }, @@ -253,7 +131,7 @@ local CreOptions = { default_value = 0, args = {0, 1}, event = "ToggleFontBolder", - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, }, { name = "font_gamma", @@ -266,7 +144,7 @@ local CreOptions = { args = {10, 15, 25, 30, 36, 43, 49, 56}, -- gamma values for these indexes are: labels = {0.8, 1.0, 1.45, 1.90, 2.50, 4.0, 8.0, 15.0}, - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, }, { name = "font_hinting", @@ -276,7 +154,7 @@ local CreOptions = { default_value = 2, args = {0, 1, 2}, event = "SetFontHinting", - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, } } }, @@ -292,7 +170,7 @@ local CreOptions = { args = {0, 1}, default_arg = DCREREADER_PROGRESS_BAR, event = "SetStatusLine", - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, }, { name = "embedded_css", @@ -303,7 +181,7 @@ local CreOptions = { args = {true, false}, default_arg = nil, event = "ToggleEmbeddedStyleSheet", - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, }, { name = "embedded_fonts", @@ -315,9 +193,9 @@ local CreOptions = { default_arg = nil, event = "ToggleEmbeddedFonts", enabled_func = function(configurable) - return enable_if_equals(configurable, "embedded_css", 1) + return optionsutil.enableIfEquals(configurable, "embedded_css", 1) end, - name_text_hold_callback = showValues, + name_text_hold_callback = optionsutil.showValues, }, }, }, diff --git a/frontend/ui/data/koptoptions.lua b/frontend/ui/data/koptoptions.lua index 3e2cfdfa9..351b412c7 100644 --- a/frontend/ui/data/koptoptions.lua +++ b/frontend/ui/data/koptoptions.lua @@ -1,12 +1,9 @@ local Device = require("device") local S = require("ui/data/strings") +local optionsutil = require("ui/data/optionsutil") local _ = require("gettext") local Screen = Device.screen -local function enable_if_equals(configurable, option, value) - return configurable[option] == value -end - local KoptOptions = { prefix = 'kopt', { @@ -21,6 +18,7 @@ local KoptOptions = { default_arg = "portrait", current_func = function() return Screen:getScreenMode() end, event = "SetScreenMode", + name_text_hold_callback = optionsutil.showValues, } } }, @@ -37,6 +35,7 @@ local KoptOptions = { enabled_func = Device.isTouchDevice, event = "PageCrop", args = {"manual", "auto", "semi-auto"}, + name_text_hold_callback = optionsutil.showValues, } } }, @@ -51,6 +50,7 @@ local KoptOptions = { default_value = DSCROLL_MODE, event = "SetScrollMode", args = {true, false}, + name_text_hold_callback = optionsutil.showValues, }, { name = "full_screen", @@ -61,6 +61,7 @@ local KoptOptions = { event = "SetFullScreen", args = {true, false}, show = false, + name_text_hold_callback = optionsutil.showValues, }, { name = "page_margin", @@ -69,6 +70,7 @@ local KoptOptions = { values = {0.05, 0.10, 0.25}, default_value = DKOPTREADER_CONFIG_PAGE_MARGIN, event = "MarginUpdate", + name_text_hold_callback = optionsutil.showValues, }, { name = "line_spacing", @@ -77,6 +79,7 @@ local KoptOptions = { values = {1.0, 1.2, 1.4}, default_value = DKOPTREADER_CONFIG_LINE_SPACING, advanced = true, + name_text_hold_callback = optionsutil.showValues, }, { name = "max_columns", @@ -89,8 +92,9 @@ local KoptOptions = { values = {1,2,3}, default_value = DKOPTREADER_CONFIG_MAX_COLUMNS, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = optionsutil.showValues, }, { name = "justification", @@ -106,8 +110,10 @@ local KoptOptions = { default_value = DKOPTREADER_CONFIG_JUSTIFICATION, advanced = true, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + labels = {S.AUTO, S.LEFT, S.CENTER, S.RIGHT, S.JUSTIFY}, + name_text_hold_callback = optionsutil.showValues, }, } }, @@ -125,7 +131,7 @@ local KoptOptions = { default_value = DKOPTREADER_CONFIG_FONT_SIZE, event = "FontSizeUpdate", enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, }, { @@ -139,8 +145,15 @@ local KoptOptions = { args = {-0.05, 0.05}, alternate = false, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = function(configurable, __, prefix) + local opt = { + name = "font_size", + name_text = _("Font Size"), + } + optionsutil.showValues(configurable, opt, prefix) + end } } }, @@ -156,6 +169,8 @@ local KoptOptions = { default_value = DKOPTREADER_CONFIG_CONTRAST, event = "GammaUpdate", args = {0.8, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 9.0}, + labels = {0.8, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 9.0}, + name_text_hold_callback = optionsutil.showValues, } } }, @@ -178,7 +193,8 @@ local KoptOptions = { { event = "InitScrollPageStates", }, - } + }, + name_text_hold_callback = optionsutil.showValues, }, { name = "page_opt", @@ -186,6 +202,7 @@ local KoptOptions = { toggle = {S.ON, S.OFF}, values = {1, 0}, default_value = 0, + name_text_hold_callback = optionsutil.showValues, }, { name="doc_language", @@ -195,6 +212,7 @@ local KoptOptions = { default_value = DKOPTREADER_CONFIG_DOC_DEFAULT_LANG_CODE, event = "DocLangUpdate", args = DKOPTREADER_CONFIG_DOC_LANGS_CODE, + name_text_hold_callback = optionsutil.showValues, }, { name = "word_spacing", @@ -203,8 +221,9 @@ local KoptOptions = { values = DKOPTREADER_CONFIG_WORD_SPACINGS, default_value = DKOPTREADER_CONFIG_DEFAULT_WORD_SPACING, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = optionsutil.showValues, }, { name = "writing_direction", @@ -213,8 +232,9 @@ local KoptOptions = { values = {0, 1, 2}, default_value = 0, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = optionsutil.showValues, }, { name = "quality", @@ -224,8 +244,9 @@ local KoptOptions = { default_value = DKOPTREADER_CONFIG_RENDER_QUALITY, advanced = true, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = optionsutil.showValues, }, { name = "forced_ocr", @@ -234,6 +255,7 @@ local KoptOptions = { values = {1, 0}, default_value = 0, advanced = true, + name_text_hold_callback = optionsutil.showValues, }, { name = "defect_size", @@ -244,8 +266,9 @@ local KoptOptions = { event = "DefectSizeUpdate", show = false, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = optionsutil.showValues, }, { name = "auto_straighten", @@ -255,8 +278,9 @@ local KoptOptions = { default_value = DKOPTREADER_CONFIG_AUTO_STRAIGHTEN, show = false, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = optionsutil.showValues, }, { name = "detect_indent", @@ -266,8 +290,9 @@ local KoptOptions = { default_value = DKOPTREADER_CONFIG_DETECT_INDENT, show = false, enabled_func = function(configurable) - return enable_if_equals(configurable, "text_wrap", 1) + return optionsutil.enableIfEquals(configurable, "text_wrap", 1) end, + name_text_hold_callback = optionsutil.showValues, }, } }, diff --git a/frontend/ui/data/optionsutil.lua b/frontend/ui/data/optionsutil.lua new file mode 100644 index 000000000..5d977542e --- /dev/null +++ b/frontend/ui/data/optionsutil.lua @@ -0,0 +1,133 @@ +--[[-- +This module contains miscellaneous helper functions for the creoptions and koptoptions. +]] + +local Device = require("device") +local InfoMessage = require("ui/widget/infomessage") +local UIManager = require("ui/uimanager") +local _ = require("gettext") +local Screen = Device.screen +local T = require("ffi/util").template + +local optionsutil = {} + +function optionsutil.enableIfEquals(configurable, option, value) + return configurable[option] == value +end + +function optionsutil.showValues(configurable, option, prefix) + local default = G_reader_settings:readSetting(prefix.."_"..option.name) + local current = configurable[option.name] + local value_default, value_current + local suffix = option.name_text_suffix or "" + if option.name == "screen_mode" then + current = Screen:getScreenMode() + end + local arg_table = {} + if option.toggle and option.values then + for i=1,#option.toggle do + arg_table[option.values[i]] = option.toggle[i] + end + end + if not default then + default = "not set" + if option.toggle and option.values then + value_current = current + current = arg_table[current] + end + elseif option.toggle and option.values then + value_current = current + value_default = default + default = arg_table[default] + current = arg_table[current] + end + if option.labels and option.values then + for i=1,#option.labels do + if default == option.values[i] then + default = option.labels[i] + break + end + end + for i=1,#option.labels do + if current == option.values[i] then + current = option.labels[i] + break + end + end + end + if option.name_text_true_values and option.toggle and option.values and value_default then + UIManager:show(InfoMessage:new{ + text = T(_("%1:\nCurrent value: %2 (%5%4)\nDefault value: %3 (%6%4)"), option.name_text, + current, default, suffix, value_current, value_default) + }) + elseif option.name_text_true_values and option.toggle and option.values and not value_default then + UIManager:show(InfoMessage:new{ + text = T(_("%1:\nCurrent value: %2 (%5%4)\nDefault value: %3"), option.name_text, + current, default, suffix, value_current) + }) + else + UIManager:show(InfoMessage:new{ + text = T(_("%1:\nCurrent value: %2%4\nDefault value: %3%4"), option.name_text, current, + default, suffix) + }) + end +end + +local function tableComp(a,b) + if #a ~= #b then return false end + for i=1,#a do + if a[i] ~= b[i] then return false end + end + return true +end + +function optionsutil.showValuesMargins(configurable, option) + local default = G_reader_settings:readSetting("copt_"..option.name) + local current = configurable[option.name] + local current_string + for i=1,#option.toggle do + if tableComp(current, option.values[i]) then + current_string = option.toggle[i] + break + end + end + if not default then + UIManager:show(InfoMessage:new{ + text = T(_([[ +%1: +Current value: %2 + left: %3 + top: %4 + right: %5 + bottom: %6 +Default value: not set]]), + option.name_text, current_string, current[1], current[2], current[3], current[4]) + }) + else + local default_string + for i=1,#option.toggle do + if tableComp(default, option.values[i]) then + default_string = option.toggle[i] + break + end + end + UIManager:show(InfoMessage:new{ + text = T(_([[ +%1: +Current value: %2 + left: %3 + top: %4 + right: %5 + bottom: %6 +Default value: %7 + left: %8 + top: %9 + right: %10 + bottom: %11]]), + option.name_text, current_string, current[1], current[2], current[3], current[4], + default_string, default[1], default[2], default[3], default[4]) + }) + end +end + +return optionsutil diff --git a/frontend/ui/data/strings.lua b/frontend/ui/data/strings.lua index a9b2d4f99..ab0455f62 100644 --- a/frontend/ui/data/strings.lua +++ b/frontend/ui/data/strings.lua @@ -64,5 +64,9 @@ S.TBRTL = _("TBRTL") S.TBLTR = _("TBLTR") S.FULL = _("full") S.MINI = _("mini") +S.LEFT = _("left") +S.CENTER = _("center") +S.RIGHT = _("right") +S.JUSTIFY = _("justify") return S diff --git a/frontend/ui/widget/configdialog.lua b/frontend/ui/widget/configdialog.lua index 069bde8cd..b6bcda0ce 100644 --- a/frontend/ui/widget/configdialog.lua +++ b/frontend/ui/widget/configdialog.lua @@ -235,7 +235,8 @@ function ConfigOption:init() text_font_bold = false, hold_callback = function() if self.options[c].name_text_hold_callback then - self.options[c].name_text_hold_callback(self.config.configurable, self.options[c]) + self.options[c].name_text_hold_callback(self.config.configurable, self.options[c], + self.config.config_options.prefix) end end, }