mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| # Standard main loop for *all* STDWIN applications.
 | |
| # This requires that applications:
 | |
| # - register their windows on creation and unregister them when closed
 | |
| # - have a 'dispatch' function as a window member
 | |
| 
 | |
| 
 | |
| import stdwin, stdwinq
 | |
| from stdwinevents import *
 | |
| 
 | |
| 
 | |
| # List of windows known to the main loop.
 | |
| #
 | |
| windows = []
 | |
| 
 | |
| 
 | |
| # Function to register a window.
 | |
| #
 | |
| def register(win):
 | |
| 	# First test the dispatch function by passing it a null event --
 | |
| 	# this catches registration of unconforming windows.
 | |
| 	win.dispatch(WE_NULL, win, None)
 | |
| 	if win not in windows:
 | |
| 		windows.append(win)
 | |
| 
 | |
| 
 | |
| # Function to unregister a window.
 | |
| # It is not an error to unregister an already unregistered window
 | |
| # (this is useful for cleanup actions).
 | |
| #
 | |
| def unregister(win):
 | |
| 	if win in windows:
 | |
| 		windows.remove(win) # Not in 0.9.1
 | |
| 		# 0.9.1 solution:
 | |
| 		#for i in range(len(windows)):
 | |
| 		#	if windows[i] = win:
 | |
| 		#		del windows[i]
 | |
| 		#		break
 | |
| 
 | |
| 
 | |
| # Interfaces used by WindowSched.
 | |
| #
 | |
| def countwindows():
 | |
| 	return len(windows)
 | |
| #
 | |
| def anywindow():
 | |
| 	if windows:
 | |
| 		return windows[0]
 | |
| 	else:
 | |
| 		return None
 | |
| 
 | |
| 
 | |
| # Event processing main loop.
 | |
| # Return when there are no windows left, or when an unhandled
 | |
| # exception occurs.  (It is safe to restart the main loop after
 | |
| # an unsuccessful exit.)
 | |
| # Python's stdwin.getevent() turns WE_COMMAND/WC_CANCEL events
 | |
| # into KeyboardInterrupt exceptions; these are turned back in events.
 | |
| #
 | |
| def mainloop():
 | |
| 	while windows:
 | |
| 		try:
 | |
| 			dispatch(stdwinq.getevent())
 | |
| 		except KeyboardInterrupt:
 | |
| 			dispatch(WE_COMMAND, stdwin.getactive(), WC_CANCEL)
 | |
| 
 | |
| 
 | |
| # Dispatch a single event.
 | |
| # Windows not in the windows list don't get their events:
 | |
| # events for such windows are silently ignored.
 | |
| #
 | |
| def dispatch(event):
 | |
| 	if event[1] in windows:
 | |
| 		event[1].dispatch(event)
 | 
