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.
137 lines
3.5 KiB
137 lines
3.5 KiB
8 years ago
|
-- see copyright notice in wxLdb.lua
|
||
|
|
||
|
local ui =
|
||
|
{
|
||
|
editor = require( "ui.editor" ),
|
||
|
}
|
||
|
|
||
|
local lfs = require( "lfs" )
|
||
|
|
||
|
local assert = assert
|
||
|
local setmetatable = setmetatable
|
||
|
local string = string
|
||
|
local pairs = pairs
|
||
|
local print = print
|
||
|
local table = table
|
||
|
local os = os
|
||
|
|
||
|
module( "ui.sourcePage" )
|
||
|
|
||
|
local meta = { __index = {} }
|
||
|
|
||
|
function new( parent, source )
|
||
|
local page = {}
|
||
|
setmetatable( page, meta )
|
||
|
page.editor = ui.editor.new( parent )
|
||
|
page.events = { onBreakPointChanged = {} }
|
||
|
page:setSource_( source )
|
||
|
page.editor.breakpointCallback = function( line )
|
||
|
page:runEvents_( "onBreakPointChanged", line )
|
||
|
end
|
||
|
return page
|
||
|
end
|
||
|
|
||
|
function meta.__index:getRoot()
|
||
|
return self.editor.editor
|
||
|
end
|
||
|
|
||
|
function meta.__index:setSource_( source )
|
||
|
assert( string.sub( source, 1, 1 ) == "@" )
|
||
|
local fileName = string.sub( source, 2 )
|
||
|
self.source = source
|
||
|
self.editor.editor:SetReadOnly( false )
|
||
|
self.sourceDate = lfs.attributes( fileName, "modification" ) or 0
|
||
|
self.editor.editor:LoadFile( fileName )
|
||
|
self.editor.editor:SetReadOnly( true )
|
||
|
self.lastUpdate = os.time()
|
||
|
end
|
||
|
|
||
|
function meta.__index:update()
|
||
|
local now = os.time()
|
||
|
if now > self.lastUpdate + 2 then
|
||
|
self.lastUpdate = now
|
||
|
assert( string.sub( self.source, 1, 1 ) == "@" )
|
||
|
local fileName = string.sub( self.source, 2 )
|
||
|
|
||
|
local newDate = lfs.attributes( fileName, "modification" ) or 0
|
||
|
if newDate > self.sourceDate then
|
||
|
print( "reloading source file "..fileName )
|
||
|
self.sourceDate = newDate
|
||
|
self.editor.editor:SetReadOnly( false )
|
||
|
self.editor.editor:LoadFile( fileName )
|
||
|
self.editor.editor:SetReadOnly( true )
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
function meta.__index:setFocus( line )
|
||
|
self.editor.editor:GotoLine( line-4 )
|
||
|
self.editor.editor:GotoLine( line+4 )
|
||
|
self.editor.editor:GotoLine( line-1 )
|
||
|
end
|
||
|
|
||
|
function meta.__index:getFocus()
|
||
|
local ed = self.editor.editor
|
||
|
return ed:GetCurrentLine() + 1
|
||
|
end
|
||
|
|
||
|
function meta.__index:setCurrentLine( line )
|
||
|
local editor = self.editor.editor
|
||
|
if self.currentLine == line then return end
|
||
|
|
||
|
if self.currentLine ~= nil then
|
||
|
editor:MarkerDelete( self.currentLine - 1, ui.editor.markers.currentLine )
|
||
|
end
|
||
|
|
||
|
self.currentLine = line
|
||
|
|
||
|
if self.currentLine ~= nil then
|
||
|
editor:MarkerAdd( self.currentLine - 1, ui.editor.markers.currentLine )
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function meta.__index:addOtherLine( line )
|
||
|
self.editor.editor:MarkerAdd( line - 1, ui.editor.markers.otherLine )
|
||
|
end
|
||
|
|
||
|
function meta.__index:clearOtherLines()
|
||
|
self.editor.editor:MarkerDeleteAll( ui.editor.markers.otherLine )
|
||
|
end
|
||
|
|
||
|
function meta.__index:addBreakPoint( line, bad )
|
||
|
local mt = ui.editor.markers.breakpoint
|
||
|
if bad then
|
||
|
mt = ui.editor.markers.badBreakpoint
|
||
|
end
|
||
|
self.editor.editor:MarkerAdd( line - 1, mt )
|
||
|
end
|
||
|
|
||
|
function meta.__index:clearBreakPoints()
|
||
|
self.editor.editor:MarkerDeleteAll( ui.editor.markers.breakpoint )
|
||
|
self.editor.editor:MarkerDeleteAll( ui.editor.markers.badBreakpoint )
|
||
|
end
|
||
|
|
||
|
function meta.__index:clearMarkers()
|
||
|
self.currentLine = nil
|
||
|
self.editor.editor:MarkerDeleteAll( ui.editor.markers.currentLine )
|
||
|
self.editor.editor:MarkerDeleteAll( ui.editor.markers.otherLine )
|
||
|
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:destroy()
|
||
|
self.editor:destroy()
|
||
|
end
|