| 
									
										
										
										
											1991-04-07 13:41:50 +00:00
										 |  |  | # A FormSplit lets you place its children exactly where you want them | 
					
						
							|  |  |  | # (including silly places!). | 
					
						
							|  |  |  | # It does no explicit geometry management except moving its children | 
					
						
							|  |  |  | # when it is moved. | 
					
						
							|  |  |  | # The interface to place children is as follows. | 
					
						
							|  |  |  | # Before you add a child, you may specify its (left, top) position | 
					
						
							|  |  |  | # relative to the FormSplit.  If you don't specify a position for | 
					
						
							|  |  |  | # a child, it goes right below the previous child; the first child | 
					
						
							|  |  |  | # goes to (0, 0) by default. | 
					
						
							|  |  |  | # NB: This places data attributes named form_* on its children. | 
					
						
							|  |  |  | # XXX Yes, I know, there should be options to do all sorts of relative | 
					
						
							|  |  |  | # placement, but for now this will do. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from Split import Split | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FormSplit() = Split(): | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def create(self, parent): | 
					
						
							|  |  |  | 		self.next_left = self.next_top = 0 | 
					
						
							|  |  |  | 		self.last_child = None | 
					
						
							|  |  |  | 		return Split.create(self, parent) | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1991-08-16 13:16:25 +00:00
										 |  |  | 	def getminsize(self, (m, sugg_size)): | 
					
						
							| 
									
										
										
										
											1991-04-07 13:41:50 +00:00
										 |  |  | 		max_width, max_height = 0, 0 | 
					
						
							|  |  |  | 		for c in self.children: | 
					
						
							| 
									
										
										
										
											1991-08-16 13:16:25 +00:00
										 |  |  | 			c.form_width, c.form_height = c.getminsize(m, (0, 0)) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:41:50 +00:00
										 |  |  | 			max_width = max(max_width, c.form_width + c.form_left) | 
					
						
							| 
									
										
										
										
											1991-08-16 13:16:25 +00:00
										 |  |  | 			max_height = max(max_height, \ | 
					
						
							|  |  |  | 					 c.form_height + c.form_top) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:41:50 +00:00
										 |  |  | 		return max_width, max_height | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def getbounds(self): | 
					
						
							|  |  |  | 		return self.bounds | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def setbounds(self, bounds): | 
					
						
							|  |  |  | 		self.bounds = bounds | 
					
						
							|  |  |  | 		fleft, ftop = bounds[0] | 
					
						
							|  |  |  | 		for c in self.children: | 
					
						
							|  |  |  | 			left, top = c.form_left + fleft, c.form_top + ftop | 
					
						
							|  |  |  | 			right, bottom = left + c.form_width, top + c.form_height | 
					
						
							|  |  |  | 			c.setbounds((left, top), (right, bottom)) | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def placenext(self, (left, top)): | 
					
						
							|  |  |  | 		self.next_left = left | 
					
						
							|  |  |  | 		self.next_top = top | 
					
						
							|  |  |  | 		self.last_child = None | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def addchild(self, child): | 
					
						
							|  |  |  | 		if self.last_child: | 
					
						
							|  |  |  | 			width, height = \ | 
					
						
							| 
									
										
										
										
											1991-08-16 13:16:25 +00:00
										 |  |  | 			    self.last_child.getminsize(self.beginmeasuring(), \ | 
					
						
							|  |  |  | 			    			       (0, 0)) | 
					
						
							| 
									
										
										
										
											1991-04-07 13:41:50 +00:00
										 |  |  | 			self.next_top = self.next_top + height | 
					
						
							|  |  |  | 		child.form_left = self.next_left | 
					
						
							|  |  |  | 		child.form_top = self.next_top | 
					
						
							|  |  |  | 		Split.addchild(self, child) | 
					
						
							|  |  |  | 		self.last_child = child | 
					
						
							|  |  |  | 	# |