mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			48 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								# Module 'listwin'
							 | 
						||
| 
								 | 
							
								# List windows, a subclass of gwin
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import gwin
							 | 
						||
| 
								 | 
							
								import stdwin
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def maxlinewidth(a): # Compute maximum textwidth of lines in a sequence
							 | 
						||
| 
								 | 
							
									max = 0
							 | 
						||
| 
								 | 
							
									for line in a:
							 | 
						||
| 
								 | 
							
										width = stdwin.textwidth(line)
							 | 
						||
| 
								 | 
							
										if width > max: max = width
							 | 
						||
| 
								 | 
							
									return max
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def action(w, string, i, detail): # Default item selection method
							 | 
						||
| 
								 | 
							
									pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def mup(w, detail): # Mouse up method
							 | 
						||
| 
								 | 
							
									(h, v), clicks, button, mask = detail
							 | 
						||
| 
								 | 
							
									i = divmod(v, w.lineheight)[0]
							 | 
						||
| 
								 | 
							
									if 0 <= i < len(w.data):
							 | 
						||
| 
								 | 
							
										w.action(w, w.data[i], i, detail)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def draw(w, ((left, top), (right, bottom))): # Text window draw method
							 | 
						||
| 
								 | 
							
									data = w.data
							 | 
						||
| 
								 | 
							
									d = w.begindrawing()
							 | 
						||
| 
								 | 
							
									lh = w.lineheight
							 | 
						||
| 
								 | 
							
									itop = top/lh
							 | 
						||
| 
								 | 
							
									ibot = (bottom-1)/lh + 1
							 | 
						||
| 
								 | 
							
									if itop < 0: itop = 0
							 | 
						||
| 
								 | 
							
									if ibot > len(data): ibot = len(data)
							 | 
						||
| 
								 | 
							
									for i in range(itop, ibot): d.text((0, i*lh), data[i])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def open(title, data): # Display a list of texts in a window
							 | 
						||
| 
								 | 
							
									lineheight = stdwin.lineheight()
							 | 
						||
| 
								 | 
							
									h, v = maxlinewidth(data), len(data)*lineheight
							 | 
						||
| 
								 | 
							
									h0, v0 = h + stdwin.textwidth(' '), v + lineheight
							 | 
						||
| 
								 | 
							
									if h0 > stdwin.textwidth(' ')*80: h0 = 0
							 | 
						||
| 
								 | 
							
									if v0 > stdwin.lineheight()*24: v0 = 0
							 | 
						||
| 
								 | 
							
									stdwin.setdefwinsize(h0, v0)
							 | 
						||
| 
								 | 
							
									w = gwin.open(title)
							 | 
						||
| 
								 | 
							
									w.setdocsize(h, v)
							 | 
						||
| 
								 | 
							
									w.lineheight = lineheight
							 | 
						||
| 
								 | 
							
									w.data = data
							 | 
						||
| 
								 | 
							
									w.draw = draw
							 | 
						||
| 
								 | 
							
									w.action = action
							 | 
						||
| 
								 | 
							
									w.mup = mup
							 | 
						||
| 
								 | 
							
									return w
							 |