diff options
author | Guido van Rossum <guido@python.org> | 1991-04-07 13:41:50 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1991-04-07 13:41:50 (GMT) |
commit | 2d844d1ddc581c80116c88be5854720bcf84f3e0 (patch) | |
tree | 7aaca4e789dd1394d8eff7484dfced08a635983f /Lib/stdwin/FormSplit.py | |
parent | fa5406496750f9f0717457341041297b4173430f (diff) | |
download | cpython-2d844d1ddc581c80116c88be5854720bcf84f3e0.zip cpython-2d844d1ddc581c80116c88be5854720bcf84f3e0.tar.gz cpython-2d844d1ddc581c80116c88be5854720bcf84f3e0.tar.bz2 |
Initial revision
Diffstat (limited to 'Lib/stdwin/FormSplit.py')
-rwxr-xr-x | Lib/stdwin/FormSplit.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/Lib/stdwin/FormSplit.py b/Lib/stdwin/FormSplit.py new file mode 100755 index 0000000..4f0bd01 --- /dev/null +++ b/Lib/stdwin/FormSplit.py @@ -0,0 +1,56 @@ +# 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) + # + def minsize(self, m): + max_width, max_height = 0, 0 + for c in self.children: + c.form_width, c.form_height = c.minsize(m) + max_width = max(max_width, c.form_width + c.form_left) + max_height = max(max_height, c.form_height + c.form_top) + 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 = \ + self.last_child.minsize(self.beginmeasuring()) + 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 + # |