mirror of
				https://github.com/python/cpython.git
				synced 2025-10-24 18:33:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			2.2 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
 | |
| 		return 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 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
 | 
