从 lua table 填充 iup 列表
Populating an iup list from a lua table
我正在构建一组 IUP 对话框 'helper' 功能 -- 我可以在我的 Lua 代码中包含样板,以便以一致的方式快速实现常用的界面功能。
我有一个函数可以创建带有回调的 "standard" iup 列表:
function MakeList(funcSelect)
return iup.list{
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO",
expand = "YES", visibleitems = "5"}
end
但我现在想增强它以选择性地用静态值列表填充它,这样我就可以调用例如 mylist = MakeList(myFunction, {"X", "B", "Q"})
,其中函数规范是 function MakeList(funcSelect, tblVals)
和 return 如果值的 table 给出为
的(等价物),则填充列表
iup.list{"X", "B", "Q";
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO",
expand = "YES", visibleitems = "5"}
但如果 table 值未指定或为空,则(最终)不会填充 - 这是问题的第 2 阶段。
列表将在映射之前填充;我知道在使用 myList.APPENDITEM
进行映射后该怎么做,但是对于不需要的静态列表(应该吗?)
我试过了
function MakeStaticList(funcSelect, tblVals)
return iup.list{table.unpack(tblVals);
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES",
editbox = "NO", expand = "YES", visibleitems = "5"}
end
但这会导致这种行为: 因此只有 table 中的第一项被添加到列表中。
我也试过了
function MakeStaticList(funcSelect, tblVals)
l = iup.list{valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO", expand = "YES", visibleitems = "5"}
for i, v in ipairs(tblVals) do
l[tostring(i)]=v
end
return l
end
这行得通,但是有没有更简洁的方法呢?
我想先解决填充问题,然后再解决 table 值的可选性问题。
环境是 Lua 5.1,带有 compat-5.3 模块。
万一它对任何人都有帮助,我最后做的是(迎合索引和非索引列表):
local function PopulateList(l, tblVals)
local is_indexed = (rawget( tblVals, 1 ) ~= nil)
if not is_indexed then
local i=1
for k, _ in pairs(tblVals) do
l[tostring(i)]=k
i=i+1
end
else
for i, v in ipairs(tblVals) do
l[tostring(i)]=v
end
end
end
我正在构建一组 IUP 对话框 'helper' 功能 -- 我可以在我的 Lua 代码中包含样板,以便以一致的方式快速实现常用的界面功能。
我有一个函数可以创建带有回调的 "standard" iup 列表:
function MakeList(funcSelect)
return iup.list{
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO",
expand = "YES", visibleitems = "5"}
end
但我现在想增强它以选择性地用静态值列表填充它,这样我就可以调用例如 mylist = MakeList(myFunction, {"X", "B", "Q"})
,其中函数规范是 function MakeList(funcSelect, tblVals)
和 return 如果值的 table 给出为
iup.list{"X", "B", "Q";
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO",
expand = "YES", visibleitems = "5"}
但如果 table 值未指定或为空,则(最终)不会填充 - 这是问题的第 2 阶段。
列表将在映射之前填充;我知道在使用 myList.APPENDITEM
进行映射后该怎么做,但是对于不需要的静态列表(应该吗?)
我试过了
function MakeStaticList(funcSelect, tblVals)
return iup.list{table.unpack(tblVals);
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES",
editbox = "NO", expand = "YES", visibleitems = "5"}
end
但这会导致这种行为:
我也试过了
function MakeStaticList(funcSelect, tblVals)
l = iup.list{valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO", expand = "YES", visibleitems = "5"}
for i, v in ipairs(tblVals) do
l[tostring(i)]=v
end
return l
end
这行得通,但是有没有更简洁的方法呢?
我想先解决填充问题,然后再解决 table 值的可选性问题。
环境是 Lua 5.1,带有 compat-5.3 模块。
万一它对任何人都有帮助,我最后做的是(迎合索引和非索引列表):
local function PopulateList(l, tblVals)
local is_indexed = (rawget( tblVals, 1 ) ~= nil)
if not is_indexed then
local i=1
for k, _ in pairs(tblVals) do
l[tostring(i)]=k
i=i+1
end
else
for i, v in ipairs(tblVals) do
l[tostring(i)]=v
end
end
end