Ditched '_find_SET()', since it was a no-value-added wrapper around
[python/dscho.git] / Lib / lib-stdwin / FormSplit.py
blob271cb23fc18f73d7a4a7bd6ed427aa4ac22c929d
1 # A FormSplit lets you place its children exactly where you want them
2 # (including silly places!).
3 # It does no explicit geometry management except moving its children
4 # when it is moved.
5 # The interface to place children is as follows.
6 # Before you add a child, you may specify its (left, top) position
7 # relative to the FormSplit. If you don't specify a position for
8 # a child, it goes right below the previous child; the first child
9 # goes to (0, 0) by default.
10 # NB: This places data attributes named form_* on its children.
11 # XXX Yes, I know, there should be options to do all sorts of relative
12 # placement, but for now this will do.
14 from Split import Split
16 class FormSplit(Split):
18 def create(self, parent):
19 self.next_left = self.next_top = 0
20 self.last_child = None
21 return Split.create(self, parent)
23 def getminsize(self, m, sugg_size):
24 max_width, max_height = 0, 0
25 for c in self.children:
26 c.form_width, c.form_height = c.getminsize(m, (0, 0))
27 max_width = max(max_width, c.form_width + c.form_left)
28 max_height = max(max_height, \
29 c.form_height + c.form_top)
30 return max_width, max_height
32 def getbounds(self):
33 return self.bounds
35 def setbounds(self, bounds):
36 self.bounds = bounds
37 fleft, ftop = bounds[0]
38 for c in self.children:
39 left, top = c.form_left + fleft, c.form_top + ftop
40 right, bottom = left + c.form_width, top + c.form_height
41 c.setbounds(((left, top), (right, bottom)))
43 def placenext(self, left, top):
44 self.next_left = left
45 self.next_top = top
46 self.last_child = None
48 def addchild(self, child):
49 if self.last_child:
50 width, height = \
51 self.last_child.getminsize(self.beginmeasuring(), \
52 (0, 0))
53 self.next_top = self.next_top + height
54 child.form_left = self.next_left
55 child.form_top = self.next_top
56 Split.addchild(self, child)
57 self.last_child = child