mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +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 |