home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyth_os2.zip / python-1.0.2 / Lib / stdwin / FormSplit.py < prev    next >
Text File  |  1992-12-14  |  2KB  |  59 lines

  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.
  13.  
  14. from Split import Split
  15.  
  16. class FormSplit(Split):
  17.     #
  18.     def create(self, parent):
  19.         self.next_left = self.next_top = 0
  20.         self.last_child = None
  21.         return Split.create(self, parent)
  22.     #
  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
  31.     #
  32.     def getbounds(self):
  33.         return self.bounds
  34.     #
  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)))
  42.     #
  43.     def placenext(self, left, top):
  44.         self.next_left = left
  45.         self.next_top = top
  46.         self.last_child = None
  47.     #
  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
  58.     #
  59.