SpinWidget, DoubleSpinWidget: enable/disable OK button (#8495)

OK/Apply button is enabled only after changing the input value.
pull/8506/head
hius07 2 years ago committed by GitHub
parent 791bb380ab
commit eda8379e8c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -89,10 +89,10 @@ function DoubleSpinWidget:init()
self:update()
end
function DoubleSpinWidget:update()
function DoubleSpinWidget:update(numberpicker_left_value, numberpicker_right_value)
local left_widget = NumberPickerWidget:new{
show_parent = self,
value = self.left_value,
value = numberpicker_left_value or self.left_value,
value_min = self.left_min,
value_max = self.left_max,
value_step = self.left_step,
@ -102,7 +102,7 @@ function DoubleSpinWidget:update()
}
local right_widget = NumberPickerWidget:new{
show_parent = self,
value = self.right_value,
value = numberpicker_right_value or self.right_value,
value_min = self.right_min,
value_max = self.right_max,
value_step = self.right_step,
@ -110,12 +110,20 @@ function DoubleSpinWidget:update()
precision = self.right_precision,
wrap = self.right_wrap,
}
left_widget.picker_updated_callback = function(value)
self:update(value, right_widget:getValue())
end
right_widget.picker_updated_callback = function(value)
self:update(left_widget:getValue(), value)
end
local text_max_width = math.floor(0.95 * self.width / 2)
local left_vertical_group = VerticalGroup:new{
align = "center",
TextWidget:new{
text = self.left_text,
face = self.title_face,
max_width = math.floor(0.95 * self.width / 2),
max_width = text_max_width,
},
left_widget,
}
@ -124,7 +132,7 @@ function DoubleSpinWidget:update()
TextWidget:new{
text = self.right_text,
face = self.title_face,
max_width = math.floor(0.95 * self.width / 2),
max_width = text_max_width,
},
right_widget,
}
@ -221,11 +229,16 @@ function DoubleSpinWidget:update()
},
{
text = self.ok_text,
enabled = self.left_value ~= left_widget:getValue() or self.right_value ~= right_widget:getValue(),
callback = function()
self.left_value = left_widget:getValue()
self.right_value = right_widget:getValue()
if self.callback then
self.callback(left_widget:getValue(), right_widget:getValue())
self.callback(self.left_value, self.right_value)
end
if not self.keep_shown_on_apply then
if self.keep_shown_on_apply then
self:update()
else
self:onClose()
end
end,

@ -48,6 +48,8 @@ local NumberPickerWidget = InputContainer:new{
-- in case we need calculate number of days in a given month and year
date_month = nil,
date_year = nil,
-- on update signal to the caller and pass updated value
picker_updated_callback = nil,
}
function NumberPickerWidget:init()
@ -224,6 +226,9 @@ function NumberPickerWidget:update()
UIManager:setDirty(self.show_parent, function()
return "ui", self.dimen
end)
if self.picker_updated_callback then
self.picker_updated_callback(self.value)
end
end
--[[--

@ -52,6 +52,7 @@ local SpinWidget = InputContainer:new{
}
function SpinWidget:init()
self.original_value = self.value -- used to enable ok_button, self.value may be changed in extra callback
self.screen_width = Screen:getWidth()
self.screen_height = Screen:getHeight()
if not self.width then
@ -83,10 +84,10 @@ function SpinWidget:init()
self:update()
end
function SpinWidget:update()
function SpinWidget:update(numberpicker_value)
local value_widget = NumberPickerWidget:new{
show_parent = self,
value = self.value,
value = numberpicker_value or self.value,
value_table = self.value_table,
value_index = self.value_index,
value_min = self.value_min,
@ -95,6 +96,9 @@ function SpinWidget:update()
value_hold_step = self.value_hold_step,
precision = self.precision,
wrap = self.wrap,
picker_updated_callback = function(value)
self:update(value)
end,
}
local value_group = HorizontalGroup:new{
align = "center",
@ -159,12 +163,16 @@ function SpinWidget:update()
},
{
text = self.ok_text,
enabled = self.original_value ~= value_widget:getValue(),
callback = function()
self.value, self.value_index = value_widget:getValue()
self.original_value = self.value
if self.callback then
self.value, self.value_index = value_widget:getValue()
self.callback(self)
end
if not self.keep_shown_on_apply then
if self.keep_shown_on_apply then
self:update()
else
self:onClose()
end
end,

Loading…
Cancel
Save