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
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
|
|
|