properly handle empty text entry fields (including transformations)
This commit is contained in:
@@ -32,7 +32,7 @@ function UI.Form:setValues(values)
|
||||
if child.setValue then
|
||||
child:setValue(self.values[child.formKey])
|
||||
else
|
||||
child.value = self.values[child.formKey] or ''
|
||||
child.value = self.values[child.formKey]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -56,7 +56,7 @@ function UI.Form:createForm()
|
||||
for _, child in pairs(self) do
|
||||
if type(child) == 'table' and child.UIElement then
|
||||
if child.formKey then
|
||||
child.value = self.values[child.formKey] or ''
|
||||
child.value = self.values[child.formKey]
|
||||
end
|
||||
if child.formLabel then
|
||||
child.x = self.labelWidth + self.margin - 1
|
||||
@@ -99,14 +99,6 @@ function UI.Form:validateField(field)
|
||||
return false, 'Field is required'
|
||||
end
|
||||
end
|
||||
if field.validate == 'numeric' then
|
||||
field.value = field.value or ''
|
||||
if #tostring(field.value) > 0 then
|
||||
if not tonumber(field.value) then
|
||||
return false, 'Invalid number'
|
||||
end
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -124,11 +116,7 @@ function UI.Form:save()
|
||||
end
|
||||
for _,child in pairs(self.children) do
|
||||
if child.formKey then
|
||||
if child.validate == 'numeric' then
|
||||
self.values[child.formKey] = tonumber(child.value)
|
||||
else
|
||||
self.values[child.formKey] = child.value
|
||||
end
|
||||
self.values[child.formKey] = child.value
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -493,3 +493,43 @@ function UI.Grid:eventHandler(event)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function UI.Grid.example()
|
||||
local values = {
|
||||
{ key = 'key1', value = 'value1' },
|
||||
{ key = 'key2', value = 'value2' },
|
||||
{ key = 'key3', value = 'value3-longer value text' },
|
||||
{ key = 'key4', value = 'value4' },
|
||||
{ key = 'key5', value = 'value5' },
|
||||
}
|
||||
return UI.Window {
|
||||
regular = UI.Grid {
|
||||
ex = '48%', ey = 4,
|
||||
values = values,
|
||||
sortColumn = 'key',
|
||||
inverseSort = true,
|
||||
columns = {
|
||||
{ heading = 'key', key = 'key' },
|
||||
{ heading = 'value', key = 'value' },
|
||||
},
|
||||
},
|
||||
noheader = UI.Grid {
|
||||
ex = '48%', y = 6, ey = -2,
|
||||
disableHeader = true,
|
||||
values = values,
|
||||
columns = {
|
||||
{ heading = 'key', key = 'key', width = 6, },
|
||||
{ heading = 'value', key = 'value', textColor = colors.yellow },
|
||||
},
|
||||
},
|
||||
autospace = UI.Grid {
|
||||
x = '52%', ey = 4,
|
||||
autospace = true,
|
||||
values = values,
|
||||
columns = {
|
||||
{ heading = 'key', key = 'key' },
|
||||
{ heading = 'value', key = 'value' },
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
@@ -5,8 +5,15 @@ local Util = require('opus.util')
|
||||
|
||||
local colors = _G.colors
|
||||
local _rep = string.rep
|
||||
local _lower = string.lower
|
||||
local _upper = string.upper
|
||||
|
||||
local function transform(directive)
|
||||
local transforms = {
|
||||
lowercase = string.lower,
|
||||
uppercase = string.upper,
|
||||
number = tonumber,
|
||||
}
|
||||
return transforms[directive]
|
||||
end
|
||||
|
||||
UI.TextEntry = class(UI.Window)
|
||||
UI.TextEntry.defaults = {
|
||||
@@ -25,7 +32,7 @@ UI.TextEntry.defaults = {
|
||||
}
|
||||
}
|
||||
function UI.TextEntry:postInit()
|
||||
self.entry = entry({ limit = self.limit, offset = 2 })
|
||||
self.entry = entry({ limit = self.limit, offset = 2, transform = transform(self.transform) })
|
||||
end
|
||||
|
||||
function UI.TextEntry:layout()
|
||||
@@ -36,13 +43,13 @@ end
|
||||
function UI.TextEntry:setValue(value)
|
||||
self.value = value --or ''
|
||||
self.entry:unmark()
|
||||
self.entry.value = tostring(value)
|
||||
self.entry.value = value --tostring(value or '')
|
||||
self.entry:updateScroll()
|
||||
end
|
||||
|
||||
function UI.TextEntry:setPosition(pos)
|
||||
self.entry.pos = pos
|
||||
self.entry.value = tostring(self.value or '')
|
||||
self.entry.value = self.value --tostring(self.value or '') -- WHY HERE ?
|
||||
self.entry:updateScroll()
|
||||
end
|
||||
|
||||
@@ -105,27 +112,15 @@ function UI.TextEntry:focus()
|
||||
end
|
||||
end
|
||||
|
||||
function UI.TextEntry:_transform(text)
|
||||
if self.transform == 'lowercase' then
|
||||
return _lower(text)
|
||||
elseif self.transform == 'uppercase' then
|
||||
return _upper(text)
|
||||
elseif self.transform == 'number' then
|
||||
return tonumber(text) --or 0
|
||||
end
|
||||
return text
|
||||
end
|
||||
|
||||
function UI.TextEntry:eventHandler(event)
|
||||
local text = self.value --or ''
|
||||
self.entry.value = tostring(text or '')
|
||||
local text = self.value
|
||||
self.entry.value = text
|
||||
if event.ie and self.entry:process(event.ie) then
|
||||
if self.entry.textChanged then
|
||||
self.value = self:_transform(self.entry.value)
|
||||
--_syslog(tostring(self.entry.value) .. ' ' .. tostring(self.value))
|
||||
self.value = self.entry.value
|
||||
self:draw()
|
||||
if text ~= self.value then
|
||||
self:emit({ type = 'text_change', text = self.value, element = self })
|
||||
end
|
||||
self:emit({ type = 'text_change', text = self.value, element = self })
|
||||
elseif self.entry.posChanged then
|
||||
self:updateCursor()
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user