Hi, I'm just getting started using wxLua, and have hit a couple of problems.
I tried writing a small file-tree view with Icons in wxLua but had a
few issues. I've included the code at the end of this email.
If I run it as-is (with 'lua fileview.lua') I get a segmentation fault
after a few icons have loaded. If I disable garbage collection (with
collectgarbage('stop')) then the segfault goes away, but I get error
messages saying that the icons couldn't be loaded (the filenames seem
to be strings such as "gnome-compressed" and not actual filenames). If
I hardcode a path to an icon, then it loads properly, though all the
files obviously have that one icon. Either way, if I turn garbage
collection back on I get a segmentation fault.
I'm using the GTK port of wxWidgets, compiled from the 2.8.11 source
tarball with --enable-debug. My version of wxLua was also compiled
from the source tarball. I'm using a 64-bit installation of Ubuntu
10.4, and running in the Gnome desktop environment.
Also, in case it's important, the wxIcon(wxIconLocation) constructor
seems not to be bound, so I'm using wxIcon(iconLoc:GetFileName(),
wx.wxBITMAP_TYPE_ANY) instead.
Is there a bug, or am I doing something very wrong? :x
henk
PS. This is the code I'm trying to run. I added a
collectgarbage('collect') call in a place which seems to cause it to
consistently crash every time.
---
require 'wx'
require 'lfs'
--collectgarbage('stop')
frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, 'wxLua Minimal Demo',
wx.wxDefaultPosition, wx.wxSize(450, 450),
wx.wxDEFAULT_FRAME_STYLE)
---- file tree ----------------------------------------------------------------
treeCtrl = wx.wxTreeCtrl(frame, wx.wxID_ANY)
treeCtrl:SetImageList(wx.wxImageList(16, 16))
root = treeCtrl:AddRoot('files')
do
local icons = {}
local function getIcon(filename)
local ext = string.match(filename, '.+%.([^.]*)$')
if ext and not icons[ext] then
local ft = wx.wxTheMimeTypesManager:GetFileTypeFromExtension(ext)
if ft then
local iconLoc = wx.wxIconLocation()
if ft:GetIcon(iconLoc) then
print('found for ' .. ext .. ': "' .. iconLoc:GetFileName() .. '"')
local icon = wx.wxIcon(iconLoc:GetFileName(), wx.wxBITMAP_TYPE_ANY)
--local icon =
wx.wxIcon("/usr/share/icons/gnome/16x16/mimetypes/unknown.png",
wx.wxBITMAP_TYPE_ANY)
collectgarbage('collect')
if icon:Ok() then
icons[ext] = treeCtrl:GetImageList():Add(icon)
end
print('there are now ' ..
treeCtrl:GetImageList():GetImageCount() .. ' icons')
end
end
end
return icons[ext]
end
local function recurse (dir, parentNode)
for f in lfs.dir(dir) do
if f ~= '.' and f ~= '..' then
local node = treeCtrl:AppendItem(parentNode, f)
local icon = getIcon(f)
if icon then
treeCtrl:SetItemImage(node, icon)
end
if lfs.attributes(dir .. '/' .. f).mode == 'directory' then
recurse(dir .. '/' .. f, node)
end
end
end
treeCtrl:SortChildren(parentNode)
end
recurse('.', root)
end
---- init ---------------------------------------------------------------------
frame:Show(true)
wx.wxGetApp():MainLoop()
---
------------------------------------------------------------------------------
_______________________________________________
wxlua-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wxlua-users