| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | """Easy to use dialogs.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Message(msg) -- display a message and an OK button. | 
					
						
							|  |  |  | AskString(prompt, default) -- ask for a string, display OK and Cancel buttons. | 
					
						
							|  |  |  | AskYesNoCancel(question, default) -- display a question and Yes, No and Cancel buttons. | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | bar = Progress(label, maxvalue) -- Display a progress bar | 
					
						
							|  |  |  | bar.set(value) -- Set value | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | bar.inc( *amount ) -- increment value by amount (default=1) | 
					
						
							|  |  |  | bar.label( *newlabel ) -- get or set text label.  | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | More documentation in each function. | 
					
						
							|  |  |  | This module uses DLOG resources 256, 257 and 258. | 
					
						
							|  |  |  | Based upon STDWIN dialogs with the same names and functions. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-07-17 13:25:15 +00:00
										 |  |  | from Dlg import GetNewDialog, SetDialogItemText, GetDialogItemText, ModalDialog | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | import Qd | 
					
						
							|  |  |  | import QuickDraw | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | import Dlg,Win,Evt,Events # sdm7g | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def Message(msg): | 
					
						
							|  |  |  | 	"""Display a MESSAGE string.
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	Return when the user clicks the OK button or presses Return. | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	The MESSAGE string can be at most 255 characters long. | 
					
						
							|  |  |  | 	"""
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	id = 256 | 
					
						
							|  |  |  | 	d = GetNewDialog(id, -1) | 
					
						
							|  |  |  | 	if not d: | 
					
						
							|  |  |  | 		print "Can't get DLOG resource with id =", id | 
					
						
							|  |  |  | 		return | 
					
						
							| 
									
										
										
										
											1995-07-17 13:25:15 +00:00
										 |  |  | 	tp, h, rect = d.GetDialogItem(2) | 
					
						
							|  |  |  | 	SetDialogItemText(h, msg) | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 	d.SetDialogDefaultItem(1) | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 	while 1: | 
					
						
							|  |  |  | 		n = ModalDialog(None) | 
					
						
							|  |  |  | 		if n == 1: | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def AskString(prompt, default = ""): | 
					
						
							|  |  |  | 	"""Display a PROMPT string and a text entry field with a DEFAULT string.
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	Return the contents of the text entry field when the user clicks the | 
					
						
							|  |  |  | 	OK button or presses Return. | 
					
						
							|  |  |  | 	Return None when the user clicks the Cancel button. | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	If omitted, DEFAULT is empty. | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	The PROMPT and DEFAULT strings, as well as the return value, | 
					
						
							|  |  |  | 	can be at most 255 characters long. | 
					
						
							|  |  |  | 	"""
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	id = 257 | 
					
						
							|  |  |  | 	d = GetNewDialog(id, -1) | 
					
						
							|  |  |  | 	if not d: | 
					
						
							|  |  |  | 		print "Can't get DLOG resource with id =", id | 
					
						
							|  |  |  | 		return | 
					
						
							| 
									
										
										
										
											1995-07-17 13:25:15 +00:00
										 |  |  | 	tp, h, rect = d.GetDialogItem(3) | 
					
						
							|  |  |  | 	SetDialogItemText(h, prompt) | 
					
						
							|  |  |  | 	tp, h, rect = d.GetDialogItem(4) | 
					
						
							|  |  |  | 	SetDialogItemText(h, default) | 
					
						
							|  |  |  | #	d.SetDialogItem(4, 0, 255) | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 	d.SetDialogDefaultItem(1) | 
					
						
							|  |  |  | 	d.SetDialogCancelItem(2) | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 	while 1: | 
					
						
							|  |  |  | 		n = ModalDialog(None) | 
					
						
							|  |  |  | 		if n == 1: | 
					
						
							| 
									
										
										
										
											1995-07-17 13:25:15 +00:00
										 |  |  | 			tp, h, rect = d.GetDialogItem(4) | 
					
						
							|  |  |  | 			return GetDialogItemText(h) | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 		if n == 2: return None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def AskYesNoCancel(question, default = 0): | 
					
						
							|  |  |  | ##	"""Display a QUESTION string which can be answered with Yes or No. | 
					
						
							|  |  |  | ##	 | 
					
						
							|  |  |  | ##	Return 1 when the user clicks the Yes button. | 
					
						
							|  |  |  | ##	Return 0 when the user clicks the No button. | 
					
						
							|  |  |  | ##	Return -1 when the user clicks the Cancel button. | 
					
						
							|  |  |  | ##	 | 
					
						
							|  |  |  | ##	When the user presses Return, the DEFAULT value is returned. | 
					
						
							|  |  |  | ##	If omitted, this is 0 (No). | 
					
						
							|  |  |  | ##	 | 
					
						
							|  |  |  | ##	The QUESTION strign ca be at most 255 characters. | 
					
						
							|  |  |  | ##	""" | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	id = 258 | 
					
						
							|  |  |  | 	d = GetNewDialog(id, -1) | 
					
						
							|  |  |  | 	if not d: | 
					
						
							|  |  |  | 		print "Can't get DLOG resource with id =", id | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	# Button assignments: | 
					
						
							|  |  |  | 	# 1 = default (invisible) | 
					
						
							|  |  |  | 	# 2 = Yes | 
					
						
							|  |  |  | 	# 3 = No | 
					
						
							|  |  |  | 	# 4 = Cancel | 
					
						
							|  |  |  | 	# The question string is item 5 | 
					
						
							| 
									
										
										
										
											1995-07-17 13:25:15 +00:00
										 |  |  | 	tp, h, rect = d.GetDialogItem(5) | 
					
						
							|  |  |  | 	SetDialogItemText(h, question) | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 	d.SetDialogCancelItem(4) | 
					
						
							| 
									
										
										
										
											1996-04-10 14:49:41 +00:00
										 |  |  | 	if default == 1: | 
					
						
							|  |  |  | 		d.SetDialogDefaultItem(2) | 
					
						
							|  |  |  | 	elif default == 0: | 
					
						
							|  |  |  | 		d.SetDialogDefaultItem(3) | 
					
						
							|  |  |  | 	elif default == -1: | 
					
						
							|  |  |  | 		d.SetDialogDefaultItem(4) | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 	while 1: | 
					
						
							|  |  |  | 		n = ModalDialog(None) | 
					
						
							|  |  |  | 		if n == 1: return default | 
					
						
							|  |  |  | 		if n == 2: return 1 | 
					
						
							|  |  |  | 		if n == 3: return 0 | 
					
						
							|  |  |  | 		if n == 4: return -1 | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | screenbounds = Qd.qd.screenBits.bounds | 
					
						
							|  |  |  | screenbounds = screenbounds[0]+4, screenbounds[1]+4, \ | 
					
						
							|  |  |  | 	screenbounds[2]-4, screenbounds[3]-4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				 | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | class ProgressBar: | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 	def __init__(self, title="Working...", maxval=100, label=""): | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		self.maxval = maxval | 
					
						
							|  |  |  | 		self.curval = -1 | 
					
						
							|  |  |  | 		self.d = GetNewDialog(259, -1) | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 		self.title(title) | 
					
						
							|  |  |  | 		self.label(label) | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		self._update(0) | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	def __del__( self ): | 
					
						
							|  |  |  | 		self.d.HideWindow() | 
					
						
							|  |  |  | 		del self.d | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 	def title(self, newstr=""): | 
					
						
							|  |  |  | 		"""title(text) - Set title of progress window""" | 
					
						
							|  |  |  | 		w = self.d.GetDialogWindow() | 
					
						
							|  |  |  | 		w.SetWTitle(newstr) | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 	def label( self, *newstr ): | 
					
						
							|  |  |  | 		"""label(text) - Set text in progress box""" | 
					
						
							|  |  |  | 		if newstr: | 
					
						
							|  |  |  | 			self._label = newstr[0] | 
					
						
							|  |  |  | 		tp, text_h, rect = self.d.GetDialogItem(2) | 
					
						
							|  |  |  | 		SetDialogItemText(text_h, self._label)		 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				 | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 	def _update(self, value): | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 		self.d.BringToFront() | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		tp, h, bar_rect = self.d.GetDialogItem(3) | 
					
						
							|  |  |  | 		Qd.SetPort(self.d) | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		Qd.FrameRect(bar_rect)	# Draw outline | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		inner_rect = Qd.InsetRect(bar_rect, 1, 1) | 
					
						
							|  |  |  | 		l, t, r, b = inner_rect | 
					
						
							| 
									
										
										
										
											1996-10-15 16:11:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		Qd.ForeColor(QuickDraw.blackColor) | 
					
						
							|  |  |  | 		Qd.BackColor(QuickDraw.blackColor) | 
					
						
							| 
									
										
										
										
											1996-10-15 16:11:50 +00:00
										 |  |  | 		Qd.PaintRect((l, t, int(l + (r-l)*value/self.maxval), b))	# Draw bar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Qd.ForeColor(QuickDraw.whiteColor) | 
					
						
							|  |  |  | 		Qd.BackColor(QuickDraw.whiteColor) | 
					
						
							|  |  |  | 		Qd.PaintRect((int(l + (r-l)*value/self.maxval), t, r, b))	# Clear rest | 
					
						
							|  |  |  | 				 | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		# Restore settings | 
					
						
							|  |  |  | 		Qd.ForeColor(QuickDraw.blackColor) | 
					
						
							|  |  |  | 		Qd.BackColor(QuickDraw.whiteColor) | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		# Test for cancel button | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		ready, ev = Evt.WaitNextEvent( Events.mDownMask, 1  ) | 
					
						
							|  |  |  | 		if ready :  | 
					
						
							|  |  |  | 			what,msg,when,where,mod = ev | 
					
						
							|  |  |  | 			part = Win.FindWindow(where)[0] | 
					
						
							|  |  |  | 			if Dlg.IsDialogEvent(ev): | 
					
						
							|  |  |  | 				ds = Dlg.DialogSelect(ev) | 
					
						
							|  |  |  | 				if ds[0] and ds[1] == self.d and ds[-1] == 1: | 
					
						
							|  |  |  | 					raise KeyboardInterrupt, ev | 
					
						
							|  |  |  | 			else: | 
					
						
							|  |  |  | 				if part == 4:	# inDrag  | 
					
						
							|  |  |  | 					self.d.DragWindow(where, screenbounds) | 
					
						
							|  |  |  | 				else: | 
					
						
							|  |  |  | 					MacOS.HandleEvent(ev)  | 
					
						
							|  |  |  | 			 | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 			 | 
					
						
							|  |  |  | 	def set(self, value): | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 		"""set(value) - Set progress bar position""" | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		if value < 0: value = 0 | 
					
						
							|  |  |  | 		if value > self.maxval: value = self.maxval | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 		self.curval = value | 
					
						
							| 
									
										
										
										
											1995-11-14 10:13:49 +00:00
										 |  |  | 		self._update(value) | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	def inc(self, n=1): | 
					
						
							|  |  |  | 		"""inc(amt) - Increment progress bar position""" | 
					
						
							|  |  |  | 		self.set(self.curval + n) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | def test(): | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 	import time | 
					
						
							|  |  |  | 	import MacOS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 	Message("Testing EasyDialogs.") | 
					
						
							|  |  |  | 	ok = AskYesNoCancel("Do you want to proceed?") | 
					
						
							|  |  |  | 	if ok > 0: | 
					
						
							|  |  |  | 		s = AskString("Enter your first name") | 
					
						
							|  |  |  | 		Message("Thank you,\015%s" % `s`) | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 	text = ( "Working Hard...", "Hardly Working..." ,  | 
					
						
							|  |  |  | 			"So far, so good!", "Keep on truckin'" ) | 
					
						
							|  |  |  | 	bar = ProgressBar("Progress, progress...", 100) | 
					
						
							|  |  |  | 	try: | 
					
						
							|  |  |  | 		appsw = MacOS.EnableAppswitch(0) | 
					
						
							|  |  |  | 		for i in range(100): | 
					
						
							|  |  |  | 			bar.set(i) | 
					
						
							|  |  |  | 			time.sleep(0.1) | 
					
						
							|  |  |  | 			if i % 10 == 0: | 
					
						
							|  |  |  | 				bar.label(text[(i/10) % 4]) | 
					
						
							|  |  |  | 		bar.label("Done.") | 
					
						
							|  |  |  | 		time.sleep(0.3) 	# give'em a chance to see the done. | 
					
						
							|  |  |  | 	finally: | 
					
						
							|  |  |  | 		del bar | 
					
						
							|  |  |  | 		MacOS.EnableAppswitch(appsw) | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1995-04-05 09:18:35 +00:00
										 |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											1997-05-12 15:44:14 +00:00
										 |  |  | 	try: | 
					
						
							|  |  |  | 		test() | 
					
						
							|  |  |  | 	except KeyboardInterrupt: | 
					
						
							|  |  |  | 		Message("Operation Canceled.") | 
					
						
							|  |  |  | 
 |