diff --git a/frontend/configurable.lua b/frontend/configurable.lua index 2b91e3160..8b154bd42 100644 --- a/frontend/configurable.lua +++ b/frontend/configurable.lua @@ -33,7 +33,9 @@ function Configurable:loadDefaults(config_options) local options = config_options[i].options for j=1,#config_options[i].options do local key = config_options[i].options[j].name - self[key] = config_options[i].options[j].default_value + local settings_key = config_options.prefix.."_"..key + local default = G_reader_settings:readSetting(settings_key) + self[key] = default or config_options[i].options[j].default_value if not self[key] then self[key] = config_options[i].options[j].default_arg end diff --git a/frontend/ui/widget/configdialog.lua b/frontend/ui/widget/configdialog.lua index 99e289b59..cb89e6123 100644 --- a/frontend/ui/widget/configdialog.lua +++ b/frontend/ui/widget/configdialog.lua @@ -9,6 +9,7 @@ local TextWidget = require("ui/widget/textwidget") local FixedTextWidget = require("ui/widget/fixedtextwidget") local ProgressWidget = require("ui/widget/progresswidget") local ToggleSwitch = require("ui/widget/toggleswitch") +local ConfirmBox = require("ui/widget/confirmbox") local Font = require("ui/font") local Device = require("ui/device") local GestureRange = require("ui/gesturerange") @@ -79,6 +80,13 @@ function OptionTextItem:init() }, doc = "Select Option Item", }, + HoldSelect = { + GestureRange:new{ + ges = "hold", + range = self.dimen, + }, + doc = "Hold Option Item", + }, } else self.active_key_events = { @@ -92,11 +100,21 @@ function OptionTextItem:onTapSelect() item[1].color = 0 end self[1].color = 15 - self.config:onConfigChoose(self.values, self.name, self.event, self.args, self.events, self.current_item) + self.config:onConfigChoose(self.values, self.name, + self.event, self.args, + self.events, self.current_item) UIManager:setDirty(self.config, "partial") return true end +function OptionTextItem:onHoldSelect() + self.config:onMakeDefault(self.name, self.name_text, + self.values or self.args, + self.values or self.item_text, + self.current_item) + return true +end + local OptionIconItem = InputContainer:new{} function OptionIconItem:init() self.dimen = self.icon:getSize() @@ -115,6 +133,14 @@ function OptionIconItem:init() }, doc = "Select Option Item", }, + HoldSelect = { + GestureRange:new{ + ges = "hold", + range = self.dimen, + }, + doc = "Hold Option Item", + }, + } end end @@ -126,11 +152,19 @@ function OptionIconItem:onTapSelect() end --self[1][1].invert = true self[1].color = 15 - self.config:onConfigChoose(self.values, self.name, self.event, self.args, self.events, self.current_item) + self.config:onConfigChoose(self.values, self.name, + self.event, self.args, + self.events, self.current_item) UIManager:setDirty(self.config, "partial") return true end +function OptionIconItem:onHoldSelect() + self.config:onMakeDefault(self.name, self.name_text, + self.values, self.values, self.current_item) + return true +end + local ConfigOption = CenterContainer:new{} function ConfigOption:init() local default_name_font_size = 20 @@ -287,6 +321,8 @@ function ConfigOption:init() option_items[d] = option_item option_item.items = option_items option_item.name = self.options[c].name + option_item.name_text = self.options[c].name_text + option_item.item_text = self.options[c].item_text option_item.values = self.options[c].values option_item.args = self.options[c].args option_item.event = self.options[c].event @@ -322,6 +358,7 @@ function ConfigOption:init() option_items[d] = option_item option_item.items = option_items option_item.name = self.options[c].name + option_item.name_text = self.options[c].name_text option_item.values = self.options[c].values option_item.args = self.options[c].args option_item.event = self.options[c].event @@ -340,6 +377,7 @@ function ConfigOption:init() local switch = ToggleSwitch:new{ width = math.min(max_toggle_width, toggle_width), name = self.options[c].name, + name_text = self.options[c].name_text, toggle = self.options[c].toggle, alternate = self.options[c].alternate, values = self.options[c].values, @@ -537,6 +575,16 @@ function ConfigDialog:onConfigChoose(values, name, event, args, events, position end) end +function ConfigDialog:onMakeDefault(name, name_text, values, labels, position) + UIManager:show(ConfirmBox:new{ + text = _("Set default ")..(name_text or "").." to "..labels[position].."?", + ok_callback = function() + local name = self.config_options.prefix.."_"..name + G_reader_settings:saveSetting(name, values[position]) + end, + }) +end + function ConfigDialog:closeDialog() UIManager:close(self) if self.close_callback then diff --git a/frontend/ui/widget/toggleswitch.lua b/frontend/ui/widget/toggleswitch.lua index 78c3202e9..fef772653 100644 --- a/frontend/ui/widget/toggleswitch.lua +++ b/frontend/ui/widget/toggleswitch.lua @@ -74,6 +74,13 @@ function ToggleSwitch:init() }, doc = "Toggle switch", }, + HoldSelect = { + GestureRange:new{ + ges = "hold", + range = self.dimen, + }, + doc = "Hold switch", + }, } end end @@ -131,9 +138,19 @@ function ToggleSwitch:onTapSelect(arg, gev) self.config:onConfigEvents(self.events, self.position) end --]] - self.config:onConfigChoose(self.values, self.name, self.event, self.args, self.events, self.position) + self.config:onConfigChoose(self.values, self.name, + self.event, self.args, self.events, self.position) UIManager:setDirty(self.config, "partial") return true end +function ToggleSwitch:onHoldSelect(arg, gev) + local position = math.ceil( + (gev.pos.x - self.dimen.x) / self.dimen.w * self.n_pos + ) + self.config:onMakeDefault(self.name, self.name_text, + self.values or self.args, self.toggle, position) + return true +end + return ToggleSwitch