mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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)
 |