git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27848 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #----------------------------------------------------------------------
 | |
| # 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
 | |
| # 
 | |
| 
 | |
| 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))
 | |
| 
 |