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