Graphical Remote Lua Debugger, a debugger for the lua programming language.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

76 lines
2.1 KiB

-- see copyright notice in wxLdb.lua
local print = print
local wx = require( "wx" )
_G.print = print -- override wx print function with original one
local setmetatable = setmetatable
local table = table
local debug = debug
local xpcall = xpcall
local pairs = pairs
local ipairs = ipairs
local assert = assert
local tostring = tostring
local string = string
module( "ui.callstack" )
local meta = { __index = {} }
function new( ... )
local res = {}
setmetatable( res, meta )
res:init( ... )
return res
end
function meta.__index:init( parentWidget )
self.grid = wx.wxGrid( parentWidget, wx.wxID_ANY )
self.grid:CreateGrid( 0, 4, wx.wxGrid.wxGridSelectRows )
self.grid:SetRowLabelSize( 0 )
self.grid:SetColLabelSize( 20 )
self.grid:SetColLabelValue( 0, "Name" )
self.grid:SetColSize( 0, 120 )
self.grid:SetColLabelValue( 1, "Type" )
self.grid:SetColSize( 1, 50 )
self.grid:SetColLabelValue( 2, "Source" )
self.grid:SetColSize( 2, 250 )
self.grid:SetColLabelValue( 3, "Line" )
self.grid:SetColSize( 3, 50 )
self.grid:EnableEditing( false )
self.grid:Connect( wx.wxEVT_GRID_CELL_LEFT_CLICK, function( event )
self:runEvents_( "onCallstackClicked", event:GetRow() + 1 )
event:Skip()
end )
self.events = { onCallstackClicked = {} }
end
function meta.__index:registerEvent( eventName, callback )
assert( self.events[eventName] ~= nil, "Unknown event name "..eventName )
table.insert( self.events[eventName], callback )
end
function meta.__index:runEvents_( eventName, ... )
for _, callback in pairs( self.events[eventName] ) do
callback( ... )
end
end
function meta.__index:getRoot()
return self.grid
end
function meta.__index:setData( callstack )
self.grid:DeleteRows( 0, self.grid:GetNumberRows() )
if callstack ~= nil then
self.grid:AppendRows( #callstack )
for level, entry in ipairs( callstack ) do
self.grid:SetCellValue( level - 1, 0, entry.name )
self.grid:SetCellValue( level - 1, 1, entry.type )
self.grid:SetCellValue( level - 1, 2, string.gsub( entry.source, "[\n\r]+", " " ) )
self.grid:SetCellValue( level - 1, 3, entry.line )
end
end
end