mirror of
https://github.com/koreader/koreader.git
synced 2025-12-18 12:02:09 +01:00
SpinWidget, DoubleSpinWidget: enable/disable OK button (#8495)
OK/Apply button is enabled only after changing the input value.
This commit is contained in:
@@ -89,10 +89,10 @@ function DoubleSpinWidget:init()
|
|||||||
self:update()
|
self:update()
|
||||||
end
|
end
|
||||||
|
|
||||||
function DoubleSpinWidget:update()
|
function DoubleSpinWidget:update(numberpicker_left_value, numberpicker_right_value)
|
||||||
local left_widget = NumberPickerWidget:new{
|
local left_widget = NumberPickerWidget:new{
|
||||||
show_parent = self,
|
show_parent = self,
|
||||||
value = self.left_value,
|
value = numberpicker_left_value or self.left_value,
|
||||||
value_min = self.left_min,
|
value_min = self.left_min,
|
||||||
value_max = self.left_max,
|
value_max = self.left_max,
|
||||||
value_step = self.left_step,
|
value_step = self.left_step,
|
||||||
@@ -102,7 +102,7 @@ function DoubleSpinWidget:update()
|
|||||||
}
|
}
|
||||||
local right_widget = NumberPickerWidget:new{
|
local right_widget = NumberPickerWidget:new{
|
||||||
show_parent = self,
|
show_parent = self,
|
||||||
value = self.right_value,
|
value = numberpicker_right_value or self.right_value,
|
||||||
value_min = self.right_min,
|
value_min = self.right_min,
|
||||||
value_max = self.right_max,
|
value_max = self.right_max,
|
||||||
value_step = self.right_step,
|
value_step = self.right_step,
|
||||||
@@ -110,12 +110,20 @@ function DoubleSpinWidget:update()
|
|||||||
precision = self.right_precision,
|
precision = self.right_precision,
|
||||||
wrap = self.right_wrap,
|
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{
|
local left_vertical_group = VerticalGroup:new{
|
||||||
align = "center",
|
align = "center",
|
||||||
TextWidget:new{
|
TextWidget:new{
|
||||||
text = self.left_text,
|
text = self.left_text,
|
||||||
face = self.title_face,
|
face = self.title_face,
|
||||||
max_width = math.floor(0.95 * self.width / 2),
|
max_width = text_max_width,
|
||||||
},
|
},
|
||||||
left_widget,
|
left_widget,
|
||||||
}
|
}
|
||||||
@@ -124,7 +132,7 @@ function DoubleSpinWidget:update()
|
|||||||
TextWidget:new{
|
TextWidget:new{
|
||||||
text = self.right_text,
|
text = self.right_text,
|
||||||
face = self.title_face,
|
face = self.title_face,
|
||||||
max_width = math.floor(0.95 * self.width / 2),
|
max_width = text_max_width,
|
||||||
},
|
},
|
||||||
right_widget,
|
right_widget,
|
||||||
}
|
}
|
||||||
@@ -221,11 +229,16 @@ function DoubleSpinWidget:update()
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
text = self.ok_text,
|
text = self.ok_text,
|
||||||
|
enabled = self.left_value ~= left_widget:getValue() or self.right_value ~= right_widget:getValue(),
|
||||||
callback = function()
|
callback = function()
|
||||||
|
self.left_value = left_widget:getValue()
|
||||||
|
self.right_value = right_widget:getValue()
|
||||||
if self.callback then
|
if self.callback then
|
||||||
self.callback(left_widget:getValue(), right_widget:getValue())
|
self.callback(self.left_value, self.right_value)
|
||||||
end
|
end
|
||||||
if not self.keep_shown_on_apply then
|
if self.keep_shown_on_apply then
|
||||||
|
self:update()
|
||||||
|
else
|
||||||
self:onClose()
|
self:onClose()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ local NumberPickerWidget = InputContainer:new{
|
|||||||
-- in case we need calculate number of days in a given month and year
|
-- in case we need calculate number of days in a given month and year
|
||||||
date_month = nil,
|
date_month = nil,
|
||||||
date_year = nil,
|
date_year = nil,
|
||||||
|
-- on update signal to the caller and pass updated value
|
||||||
|
picker_updated_callback = nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
function NumberPickerWidget:init()
|
function NumberPickerWidget:init()
|
||||||
@@ -224,6 +226,9 @@ function NumberPickerWidget:update()
|
|||||||
UIManager:setDirty(self.show_parent, function()
|
UIManager:setDirty(self.show_parent, function()
|
||||||
return "ui", self.dimen
|
return "ui", self.dimen
|
||||||
end)
|
end)
|
||||||
|
if self.picker_updated_callback then
|
||||||
|
self.picker_updated_callback(self.value)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[--
|
--[[--
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ local SpinWidget = InputContainer:new{
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SpinWidget:init()
|
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_width = Screen:getWidth()
|
||||||
self.screen_height = Screen:getHeight()
|
self.screen_height = Screen:getHeight()
|
||||||
if not self.width then
|
if not self.width then
|
||||||
@@ -83,10 +84,10 @@ function SpinWidget:init()
|
|||||||
self:update()
|
self:update()
|
||||||
end
|
end
|
||||||
|
|
||||||
function SpinWidget:update()
|
function SpinWidget:update(numberpicker_value)
|
||||||
local value_widget = NumberPickerWidget:new{
|
local value_widget = NumberPickerWidget:new{
|
||||||
show_parent = self,
|
show_parent = self,
|
||||||
value = self.value,
|
value = numberpicker_value or self.value,
|
||||||
value_table = self.value_table,
|
value_table = self.value_table,
|
||||||
value_index = self.value_index,
|
value_index = self.value_index,
|
||||||
value_min = self.value_min,
|
value_min = self.value_min,
|
||||||
@@ -95,6 +96,9 @@ function SpinWidget:update()
|
|||||||
value_hold_step = self.value_hold_step,
|
value_hold_step = self.value_hold_step,
|
||||||
precision = self.precision,
|
precision = self.precision,
|
||||||
wrap = self.wrap,
|
wrap = self.wrap,
|
||||||
|
picker_updated_callback = function(value)
|
||||||
|
self:update(value)
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
local value_group = HorizontalGroup:new{
|
local value_group = HorizontalGroup:new{
|
||||||
align = "center",
|
align = "center",
|
||||||
@@ -159,12 +163,16 @@ function SpinWidget:update()
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
text = self.ok_text,
|
text = self.ok_text,
|
||||||
|
enabled = self.original_value ~= value_widget:getValue(),
|
||||||
callback = function()
|
callback = function()
|
||||||
|
self.value, self.value_index = value_widget:getValue()
|
||||||
|
self.original_value = self.value
|
||||||
if self.callback then
|
if self.callback then
|
||||||
self.value, self.value_index = value_widget:getValue()
|
|
||||||
self.callback(self)
|
self.callback(self)
|
||||||
end
|
end
|
||||||
if not self.keep_shown_on_apply then
|
if self.keep_shown_on_apply then
|
||||||
|
self:update()
|
||||||
|
else
|
||||||
self:onClose()
|
self:onClose()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|||||||
Reference in New Issue
Block a user