mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Initial revision
This commit is contained in:
parent
fa54064967
commit
2d844d1ddc
10 changed files with 861 additions and 0 deletions
56
Lib/lib-stdwin/FormSplit.py
Normal file
56
Lib/lib-stdwin/FormSplit.py
Normal file
|
@ -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
|
||||
#
|
Loading…
Add table
Add a link
Reference in a new issue