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

View File

@@ -101,6 +101,48 @@ return function (config)
text_focused = {
slices = RESOURCE .. 'text_focused.png',
},
check = {
canFocus = true,
},
['check.unchecked'] = {
icon = RESOURCE .. 'check_unchecked.png',
},
['check.checked'] = {
icon = RESOURCE .. 'check_checked.png',
},
['check.unchecked_pressed'] = {
icon = RESOURCE .. 'check_unchecked_pressed.png',
},
['check.checked_pressed'] = {
icon = RESOURCE .. 'check_checked_pressed.png',
},
['check.unchecked_focused'] = {
icon = RESOURCE .. 'check_unchecked_focused.png',
},
['check.checked_focused'] = {
icon = RESOURCE .. 'check_checked_focused.png',
},
radio = {
canFocus = true,
},
['radio.unchecked'] = {
icon = RESOURCE .. 'radio_unchecked.png',
},
['radio.checked'] = {
icon = RESOURCE .. 'radio_checked.png',
},
['radio.unchecked_pressed'] = {
icon = RESOURCE .. 'radio_unchecked_pressed.png',
},
['radio.checked_pressed'] = {
icon = RESOURCE .. 'radio_checked_pressed.png',
},
['radio.unchecked_focused'] = {
icon = RESOURCE .. 'radio_unchecked_focused.png',
},
['radio.checked_focused'] = {
icon = RESOURCE .. 'radio_checked_focused.png',
},
}
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

View File

@@ -19,9 +19,11 @@ Widget.isWidget = true
Widget.typeDecorators = {
button = require(ROOT .. 'widget.button'),
check = require(ROOT .. 'widget.check'),
menu = require(ROOT .. 'widget.menu'),
['menu.item'] = require(ROOT .. 'widget.menu.item'),
progress = require(ROOT .. 'widget.progress'),
radio = require(ROOT .. 'widget.radio'),
sash = require(ROOT .. 'widget.sash'),
slider = require(ROOT .. 'widget.slider'),
stepper = require(ROOT .. 'widget.stepper'),

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