101 lines
2.3 KiB
Python
101 lines
2.3 KiB
Python
# wdbsrcwin.py -- source window for wdb
|
|
|
|
import stdwin
|
|
from stdwinevents import *
|
|
import srcwin
|
|
|
|
|
|
class DebuggerSourceWindow(srcwin.SourceWindow):
|
|
|
|
def __init__(self, debugger, filename):
|
|
self.debugger = debugger
|
|
self.curlineno = 0
|
|
self.focus = 0
|
|
srcwin.SourceWindow.__init__(self, filename)
|
|
|
|
def close(self):
|
|
del self.debugger.sourcewindows[self.filename]
|
|
del self.debugger
|
|
srcwin.SourceWindow.close(self)
|
|
|
|
def dispatch(self, event):
|
|
type, win, detail = event
|
|
if type == WE_CHAR:
|
|
self.char(detail)
|
|
elif type == WE_COMMAND:
|
|
self.command(detail)
|
|
elif type == WE_MOUSE_DOWN:
|
|
self.mouse_down(detail)
|
|
else:
|
|
srcwin.SourceWindow.dispatch(self, event)
|
|
|
|
def char(self, detail):
|
|
self.debugger.char(detail)
|
|
|
|
def command(self, detail):
|
|
self.debugger.command(detail)
|
|
|
|
def mouse_down(self, detail):
|
|
(h, v), clicks, button, mask = detail
|
|
if h >= self.leftmargin:
|
|
srcwin.SourceWindow.dispatch(self, \
|
|
(WE_MOUSE_DOWN, self.win, detail))
|
|
return
|
|
lineno = v/self.lineheight + 1
|
|
if 1 <= lineno <= self.linecount:
|
|
if self.debugger.get_break(self.filename, lineno):
|
|
f = self.debugger.clear_break
|
|
else:
|
|
f = self.debugger.set_break
|
|
err = f(self.filename, lineno)
|
|
if err: stdwin.message(err)
|
|
else: self.changemark(lineno)
|
|
else:
|
|
stdwin.fleep()
|
|
|
|
def getmark(self, lineno):
|
|
s = `lineno`
|
|
if lineno == self.focus:
|
|
s = '[' + s + ']'
|
|
else:
|
|
s = ' ' + s + ' '
|
|
if lineno == self.curlineno:
|
|
s = s + '->'
|
|
else:
|
|
s = s + ' '
|
|
br = self.debugger.breaks
|
|
if br.has_key(self.filename) and lineno in br[self.filename]:
|
|
s = s + 'B'
|
|
else:
|
|
s = s + ' '
|
|
return s
|
|
|
|
def getmargin(self):
|
|
return stdwin.textwidth('[' + `self.linecount+1` + ']->B ')
|
|
|
|
def setlineno(self, newlineno):
|
|
if newlineno != self.curlineno:
|
|
oldlineno = self.curlineno
|
|
self.curlineno = newlineno
|
|
self.changemark(oldlineno)
|
|
self.changemark(newlineno)
|
|
if newlineno != 0:
|
|
self.showline(newlineno)
|
|
|
|
def resetlineno(self):
|
|
self.setlineno(0)
|
|
|
|
def setfocus(self, newfocus):
|
|
if newfocus != self.focus:
|
|
oldfocus = self.focus
|
|
self.focus = newfocus
|
|
self.changemark(oldfocus)
|
|
self.changemark(newfocus)
|
|
if newfocus != 0:
|
|
self.showline(newfocus)
|
|
|
|
def resetfocus(self):
|
|
self.setfocus(0)
|
|
|
|
# XXX Should get rid of focus stuff again
|