mirror of
				https://github.com/python/cpython.git
				synced 2025-10-26 11:14:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| # 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
 | 
