add check and radio controls

This commit is contained in:
airstruck
2015-11-29 23:24:12 -05:00
parent 2d64e6ca69
commit ed98c0beb2
31 changed files with 150 additions and 14 deletions

18
luigi/widget/check.lua Normal file
View File

@@ -0,0 +1,18 @@
--[[--
A check box.
@widget check
--]]--
return function (self)
self:onPress(function ()
self.value = not self.value
end)
self:onChange(function ()
local subtype = self.value and 'check.checked' or 'check.unchecked'
self.type = { 'check', subtype }
end)
self.value = not not self.value
end

33
luigi/widget/radio.lua Normal file
View File

@@ -0,0 +1,33 @@
--[[--
A radio button.
@widget radio
--]]--
-- TODO: make `group` a first-class attribute
local groups = {}
return function (self)
local groupName = self.group or 'default'
if not groups[groupName] then
groups[groupName] = {}
end
local group = groups[groupName]
group[#group + 1] = self
self:onPress(function ()
for _, widget in ipairs(group) do
widget.value = widget == self
end
end)
self:onChange(function ()
local subtype = self.value and 'radio.checked' or 'radio.unchecked'
self.type = { 'radio', subtype }
end)
self.value = not not self.value
end