mirror of
				https://github.com/python/cpython.git
				synced 2025-10-26 11:14:33 +00:00 
			
		
		
		
	 89a78697b8
			
		
	
	
		89a78697b8
		
	
	
	
	
		
			
			* Many modules: fixes for new, stricter, argument passing rules (most changes were automatic ones -- not all of this is tested!). * gwin.py: now uses mainloop.py for its main loop and window admin. * mainloop.py: always call dispatch() with event as a tuple! * Fix bug in pdb's 'clear' command -- don't set the bpt but clear it!
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| # Module 'StripChart'
 | |
| 
 | |
| import rect
 | |
| from Buttons import LabelAppearance, NoReactivity
 | |
| 
 | |
| # A StripChart doesn't really look like a label but it needs a base class.
 | |
| # LabelAppearance allows it to be disabled and hilited.
 | |
| 
 | |
| class StripChart(LabelAppearance, NoReactivity):
 | |
| 	#
 | |
| 	def define(self, parent, scale):
 | |
| 		self.parent = parent
 | |
| 		parent.addchild(self)
 | |
| 		self.init_appearance()
 | |
| 		self.init_reactivity()
 | |
| 		self.ydata = []
 | |
| 		self.scale = scale
 | |
| 		self.resetbounds()
 | |
| 		return self
 | |
| 	#
 | |
| 	def destroy(self):
 | |
| 		self.parent = 0
 | |
| 	#
 | |
| 	def setbounds(self, bounds):
 | |
| 		LabelAppearance.setbounds(self, bounds)
 | |
| 		self.resetbounds()
 | |
| 	#
 | |
| 	def resetbounds(self):
 | |
| 		(left, top), (right, bottom) = self.bounds
 | |
| 		self.width = right-left
 | |
| 		self.height = bottom-top
 | |
| 		excess = len(self.ydata) - self.width
 | |
| 		if excess > 0:
 | |
| 			del self.ydata[:excess]
 | |
| 		elif excess < 0:
 | |
| 			while len(self.ydata) < self.width:
 | |
| 				self.ydata.insert(0, 0)
 | |
| 	#
 | |
| 	def append(self, y):
 | |
| 		self.ydata.append(y)
 | |
| 		excess = len(self.ydata) - self.width
 | |
| 		if excess > 0:
 | |
| 			del self.ydata[:excess]
 | |
| 			if self.bounds <> rect.empty:
 | |
| 				self.parent.scroll(self.bounds, (-excess, 0))
 | |
| 		if self.bounds <> rect.empty:
 | |
| 			(left, top), (right, bottom) = self.bounds
 | |
| 			i = len(self.ydata)
 | |
| 			area = (left+i-1, top), (left+i, bottom)
 | |
| 			self.draw(self.parent.begindrawing(), area)
 | |
| 	#
 | |
| 	def draw(self, d, area):
 | |
| 		area = rect.intersect([area, self.bounds])
 | |
| 		if area == rect.empty:
 | |
| 			return
 | |
| 		d.cliprect(area)
 | |
| 		d.erase(self.bounds)
 | |
| 		(a_left, a_top), (a_right, a_bottom) = area
 | |
| 		(left, top), (right, bottom) = self.bounds
 | |
| 		height = bottom - top
 | |
| 		i1 = a_left - left
 | |
| 		i2 = a_right - left
 | |
| 		for i in range(max(0, i1), min(len(self.ydata), i2)):
 | |
| 			split = bottom-self.ydata[i]*height/self.scale
 | |
| 			d.paint((left+i, split), (left+i+1, bottom))
 | |
| 		if not self.enabled:
 | |
| 			self.flipenable(d)
 | |
| 		if self.hilited:
 | |
| 			self.fliphilite(d)
 | |
| 		d.noclip()
 |