X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b9a4190f70909de9568f45389e7aa3ecbc66b8a..28bed70aa9162c430ed20e9d8d9983b2dd63cf10:/wxPython/wx/lib/anchors.py diff --git a/wxPython/wx/lib/anchors.py b/wxPython/wx/lib/anchors.py index 57e8b8a499..af7cd8abfe 100644 --- a/wxPython/wx/lib/anchors.py +++ b/wxPython/wx/lib/anchors.py @@ -1,8 +1,99 @@ +#---------------------------------------------------------------------- +# Name: wxPython.lib.anchors +# Purpose: A class that provides an easy to use interface over layout +# constraints for anchored layout. +# +# Author: Riaan Booysen +# +# Created: 15-Dec-2000 +# RCS-ID: $Id$ +# Copyright: (c) 2000 by Total Control Software +# Licence: wxWindows license +#---------------------------------------------------------------------- +# 11/30/2003 - Jeff Grimmett (grimmtooth@softhome.net) +# +# o Updated for wx namespace +# o Tested with updated demo +# -"""Renamer stub: provides a way to drop the wx prefix from wxPython objects.""" +import wx + +class LayoutAnchors(wx.LayoutConstraints): + """ A class that implements Delphi's Anchors with wx.LayoutConstraints. + + Anchored sides maintain the distance from the edge of the + control to the same edge of the parent. + When neither side is selected, the control keeps the same + relative position to both sides. + + The current position and size of the control and it's parent + is used when setting up the constraints. To change the size or + position of an already anchored control, set the constraints to + None, reposition or resize and reapply the anchors. + + Examples: + + Let's anchor the right and bottom edge of a control and + resize it's parent. + + ctrl.SetConstraints(LayoutAnchors(ctrl, left=0, top=0, right=1, bottom=1)) + + +=========+ +===================+ + | +-----+ | | | + | | * | -> | | + | +--*--+ | | +-----+ | + +---------+ | | * | + | +--*--+ | + +-------------------+ + * = anchored edge + + When anchored on both sides the control will stretch horizontally. + + ctrl.SetConstraints(LayoutAnchors(ctrl, 1, 0, 1, 1)) + + +=========+ +===================+ + | +-----+ | | | + | * * | -> | | + | +--*--+ | | +---------------+ | + +---------+ | * ctrl * | + | +-------*-------+ | + +-------------------+ + * = anchored edge + """ + def __init__(self, control, left=1, top=1, right=0, bottom=0): + wx.LayoutConstraints.__init__(self) + parent = control.GetParent() + if not parent: return + + pPos, pSize = parent.GetPosition(), parent.GetClientSize() + cPos, cSize = control.GetPosition(), control.GetSize() + + self.setConstraintSides(self.left, wx.Left, left, + self.right, wx.Right, right, + self.width, wx.Width, self.centreX, + cPos.x, cSize.width, pSize.width, parent) + + self.setConstraintSides(self.top, wx.Top, top, + self.bottom, wx.Bottom, bottom, + self.height, wx.Height, self.centreY, + cPos.y, cSize.height, pSize.height, parent) + + def setConstraintSides(self, side1, side1Edge, side1Anchor, + side2, side2Edge, side2Anchor, + size, sizeEdge, centre, + cPos, cSize, pSize, parent): + if side2Anchor: + side2.SameAs(parent, side2Edge, pSize - (cPos + cSize)) + + if side1Anchor: + side1.SameAs(parent, side1Edge, cPos) + + if not side2Anchor: + size.AsIs() + else: + size.AsIs() + + if not side2Anchor: + centre.PercentOf(parent, sizeEdge, + int(((cPos + cSize / 2.0) / pSize)*100)) -from wx import _rename -from wxPython.lib import anchors -_rename(globals(), anchors.__dict__, modulename='lib.anchors') -del anchors -del _rename