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.
77 lines
2.1 KiB
77 lines
2.1 KiB
8 years ago
|
-- 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
|