mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			117 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Module 'textwin'
 | |
| 
 | |
| # Text windows, a subclass of gwin
 | |
| 
 | |
| import stdwin
 | |
| import gwin
 | |
| from stdwinevents import *
 | |
| 
 | |
| 
 | |
| def fixsize(w):
 | |
| 	docwidth, docheight = w.text.getrect()[1]
 | |
| 	winheight = w.getwinsize()[1]
 | |
| 	if winheight > docheight: docheight = winheight
 | |
| 	w.setdocsize(0, docheight)
 | |
| 	fixeditmenu(w)
 | |
| 
 | |
| def cut(w, m, id):
 | |
| 	s = w.text.getfocustext()
 | |
| 	if s:
 | |
| 		stdwin.setcutbuffer(0, s)
 | |
| 		w.text.replace('')
 | |
| 		fixsize(w)
 | |
| 
 | |
| def copy(w, m, id):
 | |
| 	s = w.text.getfocustext()
 | |
| 	if s:
 | |
| 		stdwin.setcutbuffer(0, s)
 | |
| 		fixeditmenu(w)
 | |
| 
 | |
| def paste(w, m, id):
 | |
| 	w.text.replace(stdwin.getcutbuffer(0))
 | |
| 	fixsize(w)
 | |
| 
 | |
| def addeditmenu(w):
 | |
| 	m = w.editmenu = w.menucreate('Edit')
 | |
| 	m.action = []
 | |
| 	m.additem('Cut', 'X')
 | |
| 	m.action.append(cut)
 | |
| 	m.additem('Copy', 'C')
 | |
| 	m.action.append(copy)
 | |
| 	m.additem('Paste', 'V')
 | |
| 	m.action.append(paste)
 | |
| 
 | |
| def fixeditmenu(w):
 | |
| 	m = w.editmenu
 | |
| 	f = w.text.getfocus()
 | |
| 	can_copy = (f[0] < f[1])
 | |
| 	m.enable(1, can_copy)
 | |
| 	if not w.readonly:
 | |
| 		m.enable(0, can_copy)
 | |
| 		m.enable(2, (stdwin.getcutbuffer(0) <> ''))
 | |
| 
 | |
| def draw(w, area):			# Draw method
 | |
| 	w.text.draw(area)
 | |
| 
 | |
| def size(w, newsize):			# Size method
 | |
| 	w.text.move((0, 0), newsize)
 | |
| 	fixsize(w)
 | |
| 
 | |
| def close(w):				# Close method
 | |
| 	del w.text  # Break circular ref
 | |
| 	gwin.close(w)
 | |
| 
 | |
| def char(w, c):				# Char method
 | |
| 	w.text.replace(c)
 | |
| 	fixsize(w)
 | |
| 
 | |
| def backspace(w):			# Backspace method
 | |
| 	void = w.text.event(WE_COMMAND, w, WC_BACKSPACE)
 | |
| 	fixsize(w)
 | |
| 
 | |
| def arrow(w, detail):			# Arrow method
 | |
| 	w.text.arrow(detail)
 | |
| 	fixeditmenu(w)
 | |
| 
 | |
| def mdown(w, detail):			# Mouse down method
 | |
| 	void = w.text.event(WE_MOUSE_DOWN, w, detail)
 | |
| 	fixeditmenu(w)
 | |
| 
 | |
| def mmove(w, detail):			# Mouse move method
 | |
| 	void = w.text.event(WE_MOUSE_MOVE, w, detail)
 | |
| 
 | |
| def mup(w, detail):			# Mouse up method
 | |
| 	void = w.text.event(WE_MOUSE_UP, w, detail)
 | |
| 	fixeditmenu(w)
 | |
| 
 | |
| def activate(w):			# Activate method
 | |
| 	fixeditmenu(w)
 | |
| 
 | |
| def open(title, str):			# Display a string in a window
 | |
| 	w = gwin.open(title)
 | |
| 	w.readonly = 0
 | |
| 	w.text = w.textcreate((0, 0), w.getwinsize())
 | |
| 	w.text.replace(str)
 | |
| 	w.text.setfocus(0, 0)
 | |
| 	addeditmenu(w)
 | |
| 	fixsize(w)
 | |
| 	w.draw = draw
 | |
| 	w.size = size
 | |
| 	w.close = close
 | |
| 	w.mdown = mdown
 | |
| 	w.mmove = mmove
 | |
| 	w.mup = mup
 | |
| 	w.char = char
 | |
| 	w.backspace = backspace
 | |
| 	w.arrow = arrow
 | |
| 	w.activate = activate
 | |
| 	return w
 | |
| 
 | |
| def open_readonly(title, str):		# Same with char input disabled
 | |
| 	w = open(title, str)
 | |
| 	w.readonly = 1
 | |
| 	w.char = w.backspace = gwin.nop
 | |
| 	# Disable Cut and Paste menu item; leave Copy alone
 | |
| 	w.editmenu.enable(0, 0)
 | |
| 	w.editmenu.enable(2, 0)
 | |
| 	return w
 | 
