new contributions

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3879 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
1999-10-07 18:48:14 +00:00
parent e1ea357c67
commit 6147ee3451
3 changed files with 143 additions and 8 deletions

View File

@@ -106,6 +106,34 @@ def makeSimpleBorder3(win):
return bdr return bdr
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def makeShapes(win):
box =wxBoxSizer(wxVERTICAL)
box.Add(wxStaticLine(win, -1), 0)
for line in (
(wxANCHOR_NW, "NorthWest"),
(wxANCHOR_NORTH, "North"),
(wxANCHOR_NE, "NorthEast")
), (
(wxANCHOR_WEST, "West"),
(wxANCHOR_NONE, "Center"),
(wxANCHOR_EAST, "East")
), (
(wxANCHOR_SW, "SouthWest"),
(wxANCHOR_SOUTH, "South"),
(wxANCHOR_SE, "SouthEast")
):
linebox =wxBoxSizer(wxHORIZONTAL)
linebox.Add(wxStaticLine(win, -1, style=wxVERTICAL), 0)
for (anchor, label) in line:
sizer =wxShapeSizer(anchor)
sizer.Add(wxButton(win, -1, label, size=wxSize(100, 50)))
linebox.Add(sizer, 1)
linebox.Add(wxStaticLine(win, -1, style=wxVERTICAL), 0)
box.Add(linebox, 1)
box.Add(wxStaticLine(win, -1), 0)
return box
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def makeBoxInBox(win): def makeBoxInBox(win):
@@ -230,6 +258,13 @@ theTests = [
("", None, ""), ("", None, ""),
("Proportional resize", makeShapes,
"The wxShapeSizer preserves the original proportions of the window."
),
("", None, ""),
("Boxes inside of boxes", makeBoxInBox, ("Boxes inside of boxes", makeBoxInBox,
"This one shows nesting of boxes within boxes within boxes, using both " "This one shows nesting of boxes within boxes within boxes, using both "
"orientations. Notice also that button seven has a greater weighting " "orientations. Notice also that button seven has a greater weighting "
@@ -275,7 +310,7 @@ class TestFrame(wxFrame):
class TestSelectionPanel(wxPanel): class TestSelectionPanel(wxPanel):
def __init__(self, parent, frame): def __init__(self, parent, frame=NULL):
wxPanel.__init__(self, parent, -1) wxPanel.__init__(self, parent, -1)
self.frame = frame self.frame = frame

View File

@@ -14,6 +14,7 @@
from sizer import * from sizer import *
from box import * from box import *
from border import * from border import *
from shape import *
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
@@ -22,13 +23,15 @@ from wxPython.wx import wxMessageDialog, wxOK, wxICON_EXCLAMATION
if not os.environ.has_key('WXP_OLDSIZERS'): if not os.environ.has_key('WXP_OLDSIZERS'):
dlg = wxMessageDialog(None, dlg = wxMessageDialog(None,
"Since wxWindows now includes sizers the classes in\n" """\
"wxPython.lib.sizers have been depreciated. Please\n" Since the wxWindows library now includes its own sizers, the
"see the Reference Manual for details of the new classes.\n" classes in wxPython.lib.sizers have been depreciated. Please
"\n" see the Reference Manual for details of the new classes.
"To contiunue using wxPython.lib.sizers without this\n"
"message you can set the WXP_OLDSIZERS envronment \n" To contiunue using wxPython.lib.sizers without this
"variable to any value.", message you can set the WXP_OLDSIZERS envronment
variable to any value.
""",
"Depreciated Feature", "Depreciated Feature",
wxOK | wxICON_EXCLAMATION) wxOK | wxICON_EXCLAMATION)
dlg.ShowModal() dlg.ShowModal()

View File

@@ -0,0 +1,97 @@
#----------------------------------------------------------------------
# Name: wxPython.lib.sizers.shape
# Purpose: A Sizer that preserves the shape (proportions)
# of the managed window
#
# Created: 7-October-1999
# RCS-ID: $Id$
# Copyright: SIA "ANK"
# Licence: wxWindows license
#----------------------------------------------------------------------
from sizer import wxSizer
wxANCHOR_NONE = 0
wxANCHOR_NORTH = 1
wxANCHOR_SOUTH = 2
wxANCHOR_EAST = 4
wxANCHOR_WEST = 8
wxANCHOR_NW = wxANCHOR_NORTH | wxANCHOR_WEST
wxANCHOR_NE = wxANCHOR_NORTH | wxANCHOR_EAST
wxANCHOR_SW = wxANCHOR_SOUTH | wxANCHOR_WEST
wxANCHOR_SE = wxANCHOR_SOUTH | wxANCHOR_EAST
#----------------------------------------------------------------------
class wxShapeSizer(wxSizer):
"""
wxShapeSizer
This sizer preserves the proportional dimensions of the managed
window, leaving empty space either in horizontal or vertical
dimension.
By default, the managed window is centered within allowed size.
You may specify an anchor parameter to leave all of the extra
space on one side: wxANCHOR_NORTH and wxANCHOR_SOUTH manage
vertical dimension, leaving extra space on the bottom or top side,
respectively; wxANCHOR_EAST and wxANCHOR_WEST do the same in
horizontal dimension. wxANCHOR_NW, wxANCHOR_NE, wxANCHOR_SW
and wxANCHOR_SE are short-cut names for combinations north+west,
north+east, south+west, south+east.
If both anchors are specified in either direction, south and east
take precedence over north and west, respectively. (Because of
gravity, widgets tend to fall down.)
"""
def __init__(self, anchor =wxANCHOR_NONE):
wxSizer.__init__(self)
self.anchor =anchor
def Add(self, widget):
if self.children:
raise ValueError("wxShapeSizer can only contain one child.")
wxSizer.Add(self, widget)
def CalcMin(self):
isSizer, widget, width, height, borderSize = self.children[0]
if isSizer:
width, height = widget.CalcMin()
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
anchor =self.anchor
# get current dimensions of the managed window
w, h =self.CalcMin()
ratio =float(w) /h
# in what direction space should be added:
# -1: horisontal
# 1: vertical
# 0: shape is ok
dir =cmp(ratio /width *height, 1)
if dir <0:
# recalculate width
old_width =width
width =height *ratio
if anchor & wxANCHOR_EAST:
px =px +old_width -width
elif not (anchor & wxANCHOR_WEST):
px =px +(old_width -width) /2
elif dir >0:
# recalculate height
old_height =height
height =width /ratio
if anchor & wxANCHOR_SOUTH:
py =py +old_height -height
elif not (anchor & wxANCHOR_NORTH):
py =py +(old_height -height) /2
widget.SetDimensions(px, py, width, height)