]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/wxPython/lib/sizers/border.py
wxPython 2.1b1 for wxMSW (wxGTK coming soon)
[wxWidgets.git] / utils / wxPython / lib / sizers / border.py
diff --git a/utils/wxPython/lib/sizers/border.py b/utils/wxPython/lib/sizers/border.py
new file mode 100644 (file)
index 0000000..fd054c6
--- /dev/null
@@ -0,0 +1,109 @@
+#----------------------------------------------------------------------
+# Name:        wxPython.lib.sizers.border
+# Purpose:     A Sizer that wraps an empty border around its contents
+#
+# Author:      Robin Dunn
+#
+# Created:     9-June-1999
+# RCS-ID:      $Id$
+# Copyright:   (c) 1998 by Total Control Software
+# Licence:     wxWindows license
+#----------------------------------------------------------------------
+
+from sizer       import wxSizer
+
+wxNORTH = 1
+wxSOUTH = 2
+wxEAST  = 4
+wxWEST  = 8
+wxALL   = wxNORTH | wxSOUTH | wxEAST | wxWEST
+
+#----------------------------------------------------------------------
+
+class wxBorderSizer(wxSizer):
+    """
+    wxBorderSizer
+
+    This sizer provides an empty buffer on one or more sides of it's
+    contents.  It can only hold a single widget, but that can be a
+    sizer containing other items if you wish.
+
+    The sizer is constructed with a parameter specifying which sides
+    should have the border.  You can use a logical OR of the following
+    values to specify the sides:
+
+        wxNORTH  -- the top side
+        wxSOUTH  -- the bottom side
+        wxEAST   -- the right side
+        wxWEST   -- the left side
+        wxALL    -- all sides
+
+    The width in pixels of the border is specified when the child
+    widget is Added to the sizer.
+
+    """
+    def __init__(self, sides = wxALL):
+        wxSizer.__init__(self)
+        self.sides = sides
+
+
+    def Add(self, widget, borderSize):
+        if self.children:
+            raise ValueError("wxBorderSizer can only contain one child.")
+
+        wxSizer.Add(self, widget, borderSize)
+
+
+    def CalcMin(self):
+        isSizer, widget, width, height, borderSize = self.children[0]
+
+        if isSizer:
+            width, height = widget.CalcMin()
+
+        if self.sides & wxEAST:
+            width = width + borderSize
+
+        if self.sides & wxWEST:
+            width = width + borderSize
+
+        if self.sides & wxNORTH:
+            height = height + borderSize
+
+        if self.sides & wxSOUTH:
+            height = height + borderSize
+
+        return width, height
+
+
+    def RecalcSizes(self):
+        isSizer, widget, width, height, borderSize = self.children[0]
+        width  = self.size.width
+        height = self.size.height
+       px = self.origin.x
+       py = self.origin.y
+
+        if self.sides & wxWEST:
+            width = width - borderSize
+            px = px + borderSize
+        if self.sides & wxEAST:
+            width = width - borderSize
+
+        if self.sides & wxNORTH:
+            height = height - borderSize
+            py = py + borderSize
+        if self.sides & wxSOUTH:
+            height = height - borderSize
+
+        widget.SetDimensions(px, py, width, height)
+
+
+#----------------------------------------------------------------------
+#
+# TODO...  Make an abstract class wxBorder whose decendants can be added to
+#          a wxBorderSizer to provide drawing for the buffer area.  Ideas are
+#          to provide a color border, beveled borders, rounded borders, etc.
+
+
+
+
+