| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | # Generic Split implementation. | 
					
						
							|  |  |  | # Use as a base class for other splits. | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | # Derived classes should at least implement the methods that call | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | # unimpl() below: getminsize(), getbounds() and setbounds(). | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Error = 'Split.Error'	# Exception | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import rect | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | from stdwinevents import * | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-12-26 13:06:29 +00:00
										 |  |  | class Split: | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# | 
					
						
							|  |  |  | 	# Calls from creator | 
					
						
							|  |  |  | 	# NB derived classes may add parameters to create() | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def create(self, parent): | 
					
						
							|  |  |  | 		parent.addchild(self) | 
					
						
							|  |  |  | 		self.parent = parent | 
					
						
							|  |  |  | 		self.children = [] | 
					
						
							|  |  |  | 		self.mouse_interest = [] | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 		self.keybd_interest = [] | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		self.timer_interest = [] | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 		self.altdraw_interest = [] | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 		self.mouse_focus = None | 
					
						
							|  |  |  | 		self.keybd_focus = None | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		return self | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	# Downcalls from parent to child | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def destroy(self): | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | 		self.parent = None | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		for child in self.children: | 
					
						
							|  |  |  | 			child.destroy() | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | 		del self.children[:] | 
					
						
							|  |  |  | 		del self.mouse_interest[:] | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 		del self.keybd_interest[:] | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | 		del self.timer_interest[:] | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 		del self.altdraw_interest[:] | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | 		self.mouse_focus = None | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 		self.keybd_focus = None | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 	def getminsize(self, (m, (width, height))): | 
					
						
							|  |  |  | 		return unimpl()			# Should ask children | 
					
						
							|  |  |  | 	def getbounds(self): | 
					
						
							|  |  |  | 		return unimpl() | 
					
						
							|  |  |  | 	def setbounds(self, bounds): | 
					
						
							|  |  |  | 		unimpl()			# Should tell children | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	# | 
					
						
							|  |  |  | 	def realize(self): | 
					
						
							|  |  |  | 		for child in self.children: | 
					
						
							|  |  |  | 			child.realize() | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | 	# | 
					
						
							|  |  |  | 	def draw(self, d_detail): | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		# (Could avoid calls to children outside the area) | 
					
						
							|  |  |  | 		for child in self.children: | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | 			child.draw(d_detail) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	def altdraw(self, detail): | 
					
						
							|  |  |  | 		for child in self.altdraw_interest: | 
					
						
							|  |  |  | 			child.altdraw(detail) | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 	# Keyboard focus handling (used internally) | 
					
						
							|  |  |  | 	# XXX This is not enough if two levels of splits | 
					
						
							|  |  |  | 	# XXX surround text fields! | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def set_keybd_focus(self, child): | 
					
						
							|  |  |  | 		if self.keybd_focus <> child: | 
					
						
							|  |  |  | 			if self.keybd_focus: | 
					
						
							|  |  |  | 				self.keybd_focus.deactivate() | 
					
						
							|  |  |  | 				self.keybd_focus = None | 
					
						
							|  |  |  | 			if child: | 
					
						
							|  |  |  | 				child.activate() | 
					
						
							|  |  |  | 				self.keybd_focus = child | 
					
						
							|  |  |  | 	def next_keybd_focus(self): | 
					
						
							|  |  |  | 		if not self.keybd_interest: | 
					
						
							|  |  |  | 			self.set_keybd_focus(None) | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		if self.keybd_focus in self.keybd_interest: | 
					
						
							|  |  |  | 			i = self.keybd_interest.index(self.keybd_focus) | 
					
						
							|  |  |  | 			i = (i+1) % len(self.keybd_interest) | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			i = 0 | 
					
						
							|  |  |  | 		self.set_keybd_focus(self.keybd_interest[i]) | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# Downcalls only made after certain upcalls | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def mouse_down(self, detail): | 
					
						
							|  |  |  | 		if self.mouse_focus: | 
					
						
							|  |  |  | 			self.mouse_focus.mouse_down(detail) | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 			return | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		p = detail[0] | 
					
						
							|  |  |  | 		for child in self.mouse_interest: | 
					
						
							|  |  |  | 			if rect.pointinrect(p, child.getbounds()): | 
					
						
							|  |  |  | 				self.mouse_focus = child | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 				if child in self.keybd_interest: | 
					
						
							|  |  |  | 					self.set_keybd_focus(child) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 				child.mouse_down(detail) | 
					
						
							|  |  |  | 	def mouse_move(self, detail): | 
					
						
							|  |  |  | 		if self.mouse_focus: | 
					
						
							|  |  |  | 			self.mouse_focus.mouse_move(detail) | 
					
						
							|  |  |  | 	def mouse_up(self, detail): | 
					
						
							|  |  |  | 		if self.mouse_focus: | 
					
						
							|  |  |  | 			self.mouse_focus.mouse_up(detail) | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 			self.mouse_focus = None | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def activate(self): | 
					
						
							|  |  |  | 		if self.keybd_focus: | 
					
						
							|  |  |  | 			self.keybd_focus.activate() | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			self.next_keybd_focus() | 
					
						
							|  |  |  | 	def deactivate(self): | 
					
						
							|  |  |  | 		if self.keybd_focus: | 
					
						
							|  |  |  | 			self.keybd_focus.deactivate() | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	def keybd(self, type_detail): | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 		if not self.keybd_focus: | 
					
						
							|  |  |  | 			self.set_keybd_focus(self.keybd_interest[0]) | 
					
						
							|  |  |  | 		type, detail = type_detail | 
					
						
							|  |  |  | 		if type = WE_COMMAND and detail = WC_TAB and \ | 
					
						
							|  |  |  | 					len(self.keybd_interest) > 1: | 
					
						
							|  |  |  | 			self.next_keybd_focus() | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		self.keybd_focus.keybd(type_detail) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	# | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	def timer(self): | 
					
						
							|  |  |  | 		for child in self.timer_interest: | 
					
						
							|  |  |  | 			child.timer() | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	# Upcalls from child to parent | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def addchild(self, child): | 
					
						
							|  |  |  | 		if child in self.children: | 
					
						
							|  |  |  | 			raise Error, 'addchild: child already inlist' | 
					
						
							|  |  |  | 		self.children.append(child) | 
					
						
							|  |  |  | 	def delchild(self, child): | 
					
						
							|  |  |  | 		if child not in self.children: | 
					
						
							|  |  |  | 			raise Error, 'delchild: child not in list' | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 		self.children.remove(child) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		if child in self.mouse_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.mouse_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 		if child in self.keybd_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.keybd_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		if child in self.timer_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.timer_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 		if child in self.altdraw_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.altdraw_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		if child = self.mouse_focus: | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 			self.mouse_focus = None | 
					
						
							|  |  |  | 		if child = self.keybd_focus: | 
					
						
							|  |  |  | 			self.keybd_focus = None | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# | 
					
						
							|  |  |  | 	def need_mouse(self, child): | 
					
						
							|  |  |  | 		if child not in self.mouse_interest: | 
					
						
							|  |  |  | 			self.mouse_interest.append(child) | 
					
						
							|  |  |  | 			self.parent.need_mouse(self) | 
					
						
							|  |  |  | 	def no_mouse(self, child): | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 		if child = self.mouse_focus: | 
					
						
							|  |  |  | 			self.mouse_focus = None | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 		if child in self.mouse_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.mouse_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 			if not self.mouse_interest: | 
					
						
							|  |  |  | 				self.parent.no_mouse(self) | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	def need_keybd(self, child): | 
					
						
							|  |  |  | 		if child not in self.keybd_interest: | 
					
						
							|  |  |  | 			self.keybd_interest.append(child) | 
					
						
							|  |  |  | 			self.parent.need_keybd(self) | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 		if not self.keybd_focus: | 
					
						
							|  |  |  | 			self.set_keybd_focus(child) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	def no_keybd(self, child): | 
					
						
							| 
									
										
										
										
											1991-08-16 13:17:27 +00:00
										 |  |  | 		if child = self.keybd_focus: | 
					
						
							|  |  |  | 			self.keybd_focus = None # Don't call child.deactivate() | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 		if child in self.keybd_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.keybd_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 			if not self.keybd_interest: | 
					
						
							|  |  |  | 				self.parent.no_keybd(self) | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	def need_timer(self, child): | 
					
						
							|  |  |  | 		if child not in self.timer_interest: | 
					
						
							|  |  |  | 			self.timer_interest.append(child) | 
					
						
							|  |  |  | 			self.parent.need_timer(self) | 
					
						
							|  |  |  | 	def no_timer(self, child): | 
					
						
							|  |  |  | 		if child in self.timer_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.timer_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 			if not self.timer_interest: | 
					
						
							|  |  |  | 				self.parent.no_timer(self) | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	def need_altdraw(self, child): | 
					
						
							|  |  |  | 		if child not in self.altdraw_interest: | 
					
						
							|  |  |  | 			self.altdraw_interest.append(child) | 
					
						
							|  |  |  | 			self.parent.need_altdraw(self) | 
					
						
							|  |  |  | 	def no_altdraw(self, child): | 
					
						
							|  |  |  | 		if child in self.altdraw_interest: | 
					
						
							| 
									
										
										
										
											1991-04-21 19:26:45 +00:00
										 |  |  | 			self.altdraw_interest.remove(child) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 			if not self.altdraw_interest: | 
					
						
							|  |  |  | 				self.parent.no_altdraw(self) | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# The rest are transparent: | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def begindrawing(self): | 
					
						
							|  |  |  | 		return self.parent.begindrawing() | 
					
						
							|  |  |  | 	def beginmeasuring(self): | 
					
						
							|  |  |  | 		return self.parent.beginmeasuring() | 
					
						
							| 
									
										
										
										
											1991-04-07 13:33:39 +00:00
										 |  |  | 	def getwindow(self): | 
					
						
							|  |  |  | 		return self.parent.getwindow() | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	# | 
					
						
							|  |  |  | 	def change(self, area): | 
					
						
							|  |  |  | 		self.parent.change(area) | 
					
						
							| 
									
										
										
										
											1990-12-26 15:33:35 +00:00
										 |  |  | 	def scroll(self, area_vector): | 
					
						
							|  |  |  | 		self.parent.scroll(area_vector) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:36 +00:00
										 |  |  | 	def settimer(self, itimer): | 
					
						
							|  |  |  | 		self.parent.settimer(itimer) |