summaryrefslogtreecommitdiffstats
path: root/Lib/stdwin/FormSplit.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1991-04-07 13:41:50 (GMT)
committerGuido van Rossum <guido@python.org>1991-04-07 13:41:50 (GMT)
commit2d844d1ddc581c80116c88be5854720bcf84f3e0 (patch)
tree7aaca4e789dd1394d8eff7484dfced08a635983f /Lib/stdwin/FormSplit.py
parentfa5406496750f9f0717457341041297b4173430f (diff)
downloadcpython-2d844d1ddc581c80116c88be5854720bcf84f3e0.zip
cpython-2d844d1ddc581c80116c88be5854720bcf84f3e0.tar.gz
cpython-2d844d1ddc581c80116c88be5854720bcf84f3e0.tar.bz2
Initial revision
Diffstat (limited to 'Lib/stdwin/FormSplit.py')
-rwxr-xr-xLib/stdwin/FormSplit.py56
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
+ #