From 3c69a2ec864e94f58243500ca6d41c980b0fa4fe Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Wed, 7 Feb 2007 16:24:56 +0000 Subject: [PATCH] merge from 2.8 branch git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/config.py | 6 +- wxPython/demo/Dialog.py | 4 +- wxPython/demo/DragImage.py | 10 +- wxPython/demo/Main.py | 22 +- wxPython/demo/SearchCtrl.py | 5 +- wxPython/demo/SizedControls.py | 10 +- wxPython/docs/CHANGES.html | 103 ++-- wxPython/docs/CHANGES.txt | 30 ++ wxPython/samples/doodle/setup.py | 5 + wxPython/src/_combobox.i | 4 +- wxPython/src/_event.i | 22 + wxPython/src/_gdicmn.i | 2 +- wxPython/src/_graphics.i | 14 +- wxPython/src/_toolbar.i | 4 + wxPython/src/_window.i | 10 +- wxPython/src/aui.i | 4 + wxPython/src/grid.i | 2 +- wxPython/wx/lib/customtreectrl.py | 4 +- wxPython/wx/lib/mixins/inspect.py | 720 +--------------------------- wxPython/wx/py/frame.py | 2 +- wxPython/wxaddons/sized_controls.py | 2 +- 21 files changed, 169 insertions(+), 816 deletions(-) diff --git a/wxPython/config.py b/wxPython/config.py index 334dda3009..2232b65deb 100644 --- a/wxPython/config.py +++ b/wxPython/config.py @@ -37,9 +37,9 @@ import distutils.command.clean #---------------------------------------------------------------------- VER_MAJOR = 2 # The first three must match wxWidgets -VER_MINOR = 8 -VER_RELEASE = 1 -VER_SUBREL = 1 # wxPython release num for x.y.z release of wxWidgets +VER_MINOR = 9 +VER_RELEASE = 0 +VER_SUBREL = 0 # wxPython release num for x.y.z release of wxWidgets VER_FLAGS = "" # release flags, such as prerelease or RC num, etc. DESCRIPTION = "Cross platform GUI toolkit for Python" diff --git a/wxPython/demo/Dialog.py b/wxPython/demo/Dialog.py index 7bb49f85bc..4c75b19c5b 100644 --- a/wxPython/demo/Dialog.py +++ b/wxPython/demo/Dialog.py @@ -110,8 +110,8 @@ class TestPanel(wx.Panel): useMetal = self.cb.IsChecked() dlg = TestDialog(self, -1, "Sample Dialog", size=(350, 200), - #style=wxCAPTION | wxSYSTEM_MENU | wxTHICK_FRAME, - style=wx.DEFAULT_DIALOG_STYLE, + #style=wx.CAPTION | wx.SYSTEM_MENU | wx.THICK_FRAME, + style=wx.DEFAULT_DIALOG_STYLE, # & ~wx.CLOSE_BOX, useMetal=useMetal, ) dlg.CenterOnScreen() diff --git a/wxPython/demo/DragImage.py b/wxPython/demo/DragImage.py index 2592c97728..d8f7ef3458 100644 --- a/wxPython/demo/DragImage.py +++ b/wxPython/demo/DragImage.py @@ -58,6 +58,11 @@ class DragCanvas(wx.ScrolledWindow): shape.fullscreen = True self.shapes.append(shape) + bmp = images.getTheKidBitmap() + shape = DragShape(bmp) + shape.pos = (200, 5) + self.shapes.append(shape) + # Make a shape from some text text = "Some Text" bg_colour = wx.Colour(57, 115, 57) # matches the bg image @@ -84,11 +89,6 @@ class DragCanvas(wx.ScrolledWindow): self.shapes.append(shape) - bmp = images.getTheKidBitmap() - shape = DragShape(bmp) - shape.pos = (200, 5) - self.shapes.append(shape) - self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 64b08bba9b..c5ec3fa129 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -1374,6 +1374,7 @@ class wxPythonDemo(wx.Frame): #--------------------------------------------- def RecreateTree(self, evt=None): + self.tree.Freeze() self.tree.DeleteAllItems() self.root = self.tree.AddRoot("wxPython Overview") firstChild = None @@ -1393,6 +1394,7 @@ class wxPythonDemo(wx.Frame): self.tree.Expand(firstChild) if filter: self.tree.ExpandAll() + self.tree.Thaw() def WriteText(self, text): if text[-1:] == '\n': @@ -1685,9 +1687,17 @@ class wxPythonDemo(wx.Frame): def OnOpenWidgetInspector(self, evt): - # Activate the widget inspector that was mixed in with the - # app, see MyApp and MyApp.OnInit below. - wx.GetApp().ShowInspectionTool() + # Activate the widget inspection tool + from wx.lib.inspect import InspectionTool + if not InspectionTool().initialized: + InspectionTool().Init() + + # Find a widget to be selected in the tree. Use either the + # one under the cursor, if any, or this frame. + wnd = wx.FindWindowAtPointer() + if not wnd: + wnd = self + InspectionTool().Show(wnd, True) #--------------------------------------------- @@ -1789,8 +1799,7 @@ class MySplashScreen(wx.SplashScreen): self.Raise() -import wx.lib.mixins.inspect -class MyApp(wx.App, wx.lib.mixins.inspect.InspectionMixin): +class MyApp(wx.App): def OnInit(self): """ Create and show the splash screen. It will then create and show @@ -1811,9 +1820,6 @@ class MyApp(wx.App, wx.lib.mixins.inspect.InspectionMixin): splash = MySplashScreen() splash.Show() - # Setup the InspectionMixin - self.Init() - return True diff --git a/wxPython/demo/SearchCtrl.py b/wxPython/demo/SearchCtrl.py index 83edf2e757..c43a31c955 100644 --- a/wxPython/demo/SearchCtrl.py +++ b/wxPython/demo/SearchCtrl.py @@ -41,8 +41,9 @@ class TestPanel(wx.Panel): self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN, self.OnSearch, self.search) self.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN, self.OnCancel, self.search) - self.search.Bind(wx.EVT_TEXT_ENTER, self.OnDoSearch, self.search) - + self.Bind(wx.EVT_TEXT_ENTER, self.OnDoSearch, self.search) + ##self.Bind(wx.EVT_TEXT, self.OnDoSearch, self.search) + def OnToggleSearchButton(self, evt): self.search.ShowSearchButton( evt.GetInt() ) diff --git a/wxPython/demo/SizedControls.py b/wxPython/demo/SizedControls.py index 63b237a3e7..857e88f4a7 100644 --- a/wxPython/demo/SizedControls.py +++ b/wxPython/demo/SizedControls.py @@ -310,7 +310,9 @@ def runTest(frame, nb, log): win = TestPanel(nb, log) return win -if __name__ == "__main__": - app = wx.PySimpleApp() - dlg = FormDialog() - dlg.ShowModal() + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) + diff --git a/wxPython/docs/CHANGES.html b/wxPython/docs/CHANGES.html index 76c422dbb0..dc1150e3a2 100644 --- a/wxPython/docs/CHANGES.html +++ b/wxPython/docs/CHANGES.html @@ -11,45 +11,16 @@

Recent Changes for wxPython

-

2.8.1.1

-
    -
  • 19-Jan-2007
  • -
-

wxMSW: Fix lack of spin control update event when control lost focus

-

Added a typeId property to the PyEventBinder class that holds the -eventType ID used for that event. So when you need the eventType -(such as when sending your own instance of standard events) you can -use, for example, wx.EVT_BUTTON.typeId instead of -wx.wxEVT_COMMAND_BUTTON_CLICKED. Note that there are a few composite -events, such as EVT_MOUSE and EVT_SCROLL, that will actually bind -multiple event types at once, and in these cases the typeId property -may not give you what you want. You should use te component events in -these cases.

-

PyCrust now has an option for showing/hiding the notebook.

-

wxMSW: Corrected drawing of bitmaps for disabled menu items.

-

Enhanced the wx.lib.mixins.inspect module. In addition to showing a -PyCrust window it is now a widget browser, which provides a tree -loaded up with all the widgets in the app, optionally with the sizers -too, and also a panel displaying the properties of the selected -window. Run the demo and type Ctrl-Alt-I keystroke (or Cmd-Alt-I on -the Mac) to see how it works. You can add this to your own apps with -just a few lines of code.

-

Added wx.SearchCtrl.[Get|Set]DescriptiveText

-

wxMac: Added support for the wx.FRAME_FLOAT_ON_PARENT style.

-

wxMac: the popups used for call tips and autocomplete lists in -StyledTextCtrl (such as in PyShell) are now top-level float-on-parent -windows so they are no longer clipped by the bounds of the stc window.

-
-
-

2.8.1.0

+

2.8.1.0

  • 8-Jan-2006

Added EVT_TASKBAR_CLICK and use it to show taskbar icon menu on right button release, not press, under MSW (bug 1623761)

-

Added wx.TreeCtrl.CollapseAll[Children]() and IsEmpty() methods

-

Fix wx.MDIChidFrame.GetPosition() (patch 1626610)

-

Fix attribute memory leak in wx.grid.Grid::ShowCellEditControl() (patch +

Added wxTreeCtrl::CollapseAll[Children]() and IsEmpty() methods; +documented wxTreeItemId (patch 1622125)

+

Fix wxMDIChidFrame::GetPosition() (patch 1626610)

+

Fix attribute memory leak in wxGrid::ShowCellEditControl() (patch 1629949)

wxGTK: Fix for controls on a toolbar being the full height of the toolbar instead of their natural height.

@@ -63,7 +34,7 @@ essentially implement the MDI interface using a normal wx.Frame and a wx.aui.AuiNotebook.

-

2.8.0.1

+

2.8.0.1

  • 11-Dec-2006
@@ -113,7 +84,7 @@ introduce native search widgets.

uses the native renderer to draw the button.

-

2.7.2.0

+

2.7.2.0

  • 7-Nov-2006
@@ -153,7 +124,7 @@ constructor to use it instead of the default ActiveMovie backend, (assuming the quicktime DLLs are available on the system.)

-

2.7.1.3

+

2.7.1.3

  • 26-Oct-2006
@@ -173,7 +144,7 @@ SystemOption to zero. In a future release this will be the default.

the new wx.GraphicsContext and wx.GraphicsPath classes.

-

2.7.1.2

+

2.7.1.2

  • 21-Oct-2006
@@ -200,7 +171,7 @@ correctly with this.

Fixed refcount leak in wx.Window.GetChildren.

-

2.7.1.1

+

2.7.1.1

  • 18-Oct-2006
@@ -463,7 +434,7 @@ wx.PaintDC or wx.BufferedPaintDC. This uses the new wx.Window.IsDoubleBuffered method.

-

2.6.3.3

+

2.6.3.3

  • 15-July-2006
@@ -500,7 +471,7 @@ machines, but at least all compile errors and warnings related to it have been resolved.

-

2.6.3.2

+

2.6.3.2

  • 3-April-2006
@@ -534,7 +505,7 @@ already shown.

is selected only with the keyboard.

-

2.6.3.0

+

2.6.3.0

  • 27-March-2006
@@ -596,7 +567,7 @@ zoomed plot and move it around with a mouse drag.

Added wx.StandardPaths.GetDocumentsDir() (patch 1214360)

-

2.6.2.1

+

2.6.2.1

  • 10-Jan-2006
@@ -765,7 +736,7 @@ be easy to accommodate, all you need to do is add a parenthesis pair: (...x, y, ...) ---> (...(x,y), ...)
-

2.6.1.0

+

2.6.1.0

  • 4-June-2005
@@ -793,7 +764,7 @@ calls.

change will get written at the next flush.

-

2.6.0.1

+

2.6.0.1

  • 30-May-2005
@@ -906,7 +877,7 @@ there is a range of allowed values (so a wx.SpinCtrl is used instead of a wx.TextCtrl.)

-

2.6.0.0

+

2.6.0.0

  • 26-Apr-2005
@@ -984,7 +955,7 @@ EVT_KEY_UP and EVT_TEXT events from its embedded text control.

-

2.5.5.1

+

2.5.5.1

  • 8-Apr-2005
@@ -1053,7 +1024,7 @@ folks.

Added the ActiveGrid IDE as a sample application.

-

2.5.4.1

+

2.5.4.1

  • 16-Mar-2005
@@ -1287,7 +1258,7 @@ wx.Image.

-

2.5.3.1

+

2.5.3.1

  • 9-Nov-2004
@@ -1444,7 +1415,7 @@ it.

version installs, and comes with an uninstaller script.

-

2.5.2.8

+

2.5.2.8

  • 27-Aug-2004
@@ -1476,7 +1447,7 @@ wxCheckListBox.
-

2.5.2.7

+

2.5.2.7

  • 14-Aug-2004
@@ -1660,7 +1631,7 @@ MigrationGuide for more details on using the new module.

Floats are allowed again as function parameters where ints are expected.

-

2.4.2.4

+

2.4.2.4

  • 1-Oct-2003
@@ -1673,7 +1644,7 @@ demonstrated in the Threads sample in the demo.

Added Chris Barker's FloatCanvas.

-

2.4.1.2

+

2.4.1.2

  • 19-Jun-2003
@@ -1728,7 +1699,7 @@ and Spacers can be specified with a wxSize (or 2-tuple) parameter

Added wxCursorFromBits.

-

2.4.0.7

+

2.4.0.7

  • 24-Mar-2003
@@ -1768,7 +1739,7 @@ think I am testing in the future...

Updated to 0.9b of PyCrust.

-

2.4.0.4

+

2.4.0.4

  • 7-Mar-2003
@@ -1829,7 +1800,7 @@ doesn't have a standard place for them.

Updated to the 0.9a version of PyCrust

-

2.4.0.2

+

2.4.0.2

  • 23-Jan-2003
@@ -1838,7 +1809,7 @@ doesn't have a standard place for them.

Added wxPyColourChooser by Michael Gilfix.

-

2.4.0.1

+

2.4.0.1

  • 10-Jan-2003
@@ -1848,14 +1819,14 @@ enhancements.

wxPython/lib/dialogs.py for more details.

-

2.3.4.2

+

2.3.4.2

  • 21-Dec-2002

Various bug fixes.

-

2.3.4.1

+

2.3.4.1

  • 18-Dec-2002
@@ -1913,7 +1884,7 @@ HTMLHelp viewer does. Changed how the wxPythonDocs tarball is built and added a script to launch the doc viewer.

-

2.3.3.1

+

2.3.3.1

  • 19-Sep-2002
@@ -2059,7 +2030,7 @@ example.

Added wxTimeCtrl from Will Sadkin.

-

2.3.2.1

+

2.3.2.1

  • 20-Dec-2001
@@ -2069,7 +2040,7 @@ without barfing and is also still compatible with Python debuggers.

Added some patches from library contributors.

-

2.3.2

+

2.3.2

  • 11-Dec-2001
@@ -2155,7 +2126,7 @@ wxPython/contrib/dllwidget and wxPython/demo/dllwidget for more details.

-

2.3.1

+

2.3.1

  • 10-Jul-2001
@@ -2172,7 +2143,7 @@ subclass wxXmlResourceHandler, etc...

Added enhanced wxVTKRenderWindow by Prabhu Ramachandran

-

2.3.0

+

2.3.0

  • 22-May-2001
@@ -2272,7 +2243,7 @@ by having smaller functional apps to play with. They can be found in wxPython/samples.

-

2.2.7

+

2.2.7

  • 19-Jun-2001
@@ -2280,7 +2251,7 @@ wxPython/samples.

changes and fixes in the wxWindows library.

-

2.2.5

+

2.2.5

  • 30-Jan-2001
diff --git a/wxPython/docs/CHANGES.txt b/wxPython/docs/CHANGES.txt index 2c959dfad8..fe9cdd31c9 100644 --- a/wxPython/docs/CHANGES.txt +++ b/wxPython/docs/CHANGES.txt @@ -1,6 +1,36 @@ Recent Changes for wxPython ===================================================================== +2.9.0.0 +------- +* + +wxGTK: Implemented support for underlined fonts in wx.StaticText + +wxGTK: wx.TopLevelWindow.SetSizeHints size increments now work + +Added wx.EventBlocker class + + + + +2.8.1.2 +------- +* + +Added wx.ToolBar.SetToolNormalBitmap and SetToolDisabledBitmap +methods. (Keep in mind however that the disabled bitmap is currently +generated on the fly by most native toolbar widgets, so this +SetToolDisabledBitmap method won't have any affect on them...) + +Refactored the inspection tool such that it can be used as a wx.App +mix-in class as it was used before (with the wx.lib.mixins.inspect +module) and also as a non mix-in tool (using wx.lib.inspect.InspectionTool). + + + + + 2.8.1.1 ------- * 19-Jan-2007 diff --git a/wxPython/samples/doodle/setup.py b/wxPython/samples/doodle/setup.py index 32f33f8a2e..6977a0500e 100644 --- a/wxPython/samples/doodle/setup.py +++ b/wxPython/samples/doodle/setup.py @@ -21,5 +21,10 @@ setup( name = "superdoodle", #console = ["superdoodle.py"] windows = ["superdoodle.py"], #data_files = DATA, + options = {"py2exe" : { "compressed": 0, + "optimize": 2, + "bundle_files": 1, + }}, + zipfile = None ) diff --git a/wxPython/src/_combobox.i b/wxPython/src/_combobox.i index d593ea6f12..bfd6f5088c 100644 --- a/wxPython/src/_combobox.i +++ b/wxPython/src/_combobox.i @@ -81,7 +81,7 @@ public: long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxPyComboBoxNameStr), - "__init__(Window parent, int id, String value=EmptyString, + "__init__(Window parent, int id=-1, String value=EmptyString, Point pos=DefaultPosition, Size size=DefaultSize, List choices=EmptyList, long style=0, Validator validator=DefaultValidator, String name=ComboBoxNameStr) -> ComboBox", @@ -102,7 +102,7 @@ public: long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxPyChoiceNameStr), - "Create(Window parent, int id, String value=EmptyString, + "Create(Window parent, int id=-1, String value=EmptyString, Point pos=DefaultPosition, Size size=DefaultSize, List choices=EmptyList, long style=0, Validator validator=DefaultValidator, String name=ChoiceNameStr) -> bool", diff --git a/wxPython/src/_event.i b/wxPython/src/_event.i index 0632593d0e..553f0e1cf6 100644 --- a/wxPython/src/_event.i +++ b/wxPython/src/_event.i @@ -37,6 +37,7 @@ enum Propagation_state wxEventType wxNewEventType(); +%constant wxEventType wxEVT_ANY; %constant wxEventType wxEVT_NULL; %constant wxEventType wxEVT_FIRST; @@ -1086,6 +1087,12 @@ have been accumulated before scrolling.", ""); taken, and one such action (for example, scrolling one increment) should occur for each delta.", ""); + DocDeclStr( + int , GetWheelAxis() const, + "Gets the axis the wheel operation concerns, 0 being the y axis as on +most mouse wheels, 1 is the x axis for things like MightyMouse scrolls +or horizontal trackpad scrolling.", ""); + DocDeclStr( int , GetLinesPerAction() const, @@ -2675,5 +2682,20 @@ internally.", ""); } +//--------------------------------------------------------------------------- + +DocStr(wxEventBlocker, +"Helper class to temporarily disable event handling for a window.", ""); + +class wxEventBlocker : public wxEvtHandler +{ +public: + wxEventBlocker(wxWindow *win, wxEventType type = wxEVT_ANY); + virtual ~wxEventBlocker(); + + void Block(wxEventType type); +}; + + //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- diff --git a/wxPython/src/_gdicmn.i b/wxPython/src/_gdicmn.i index 7d2ff9e7ba..87b2b5c900 100644 --- a/wxPython/src/_gdicmn.i +++ b/wxPython/src/_gdicmn.i @@ -572,7 +572,7 @@ public: DocDeclStr( - wxRect&, Inflate(wxCoord dx, wxCoord dy), + wxRect, Inflate(wxCoord dx, wxCoord dy), "Increases the size of the rectangle. The left border is moved farther left and the right border is moved diff --git a/wxPython/src/_graphics.i b/wxPython/src/_graphics.i index 1b261790a0..90246393dd 100644 --- a/wxPython/src/_graphics.i +++ b/wxPython/src/_graphics.i @@ -422,27 +422,19 @@ public : DocStr(wxGraphicsMatrix, "A wx.GraphicsMatrix is a native representation of an affine -matrix. The contents are specific an private to the respective +matrix. The contents are specific and private to the respective renderer. The only way to get a valid instance is via a CreateMatrix call on the graphics context or the renderer instance.", ""); class wxGraphicsMatrix : public wxGraphicsObject { public : - wxGraphicsMatrix(); +// wxGraphicsMatrix(); virtual ~wxGraphicsMatrix(); DocDeclStr( virtual void , Concat( const wxGraphicsMatrix& t ), "Concatenates the passed in matrix to the current matrix.", ""); -// %extend { -// DocStr(Copy, -// "Copy the passed in matrix to this one.", ""); -// void Copy( const wxGraphicsMatrix& t ) { -// *self = t; -// } -// } - DocDeclStr( virtual void , Set(wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, @@ -515,7 +507,7 @@ way to make this value usable.", ""); class wxGraphicsPath : public wxGraphicsObject { public : - wxGraphicsPath(); +// wxGraphicsPath(); virtual ~wxGraphicsPath(); diff --git a/wxPython/src/_toolbar.i b/wxPython/src/_toolbar.i index f7e886494e..3180b8e515 100644 --- a/wxPython/src/_toolbar.i +++ b/wxPython/src/_toolbar.i @@ -442,6 +442,10 @@ public: long style = wxNO_BORDER | wxTB_HORIZONTAL, const wxString& name = wxPyToolBarNameStr); + // TODO: In 2.9 move these to the base class... + void SetToolNormalBitmap(int id, const wxBitmap& bitmap); + void SetToolDisabledBitmap(int id, const wxBitmap& bitmap); + static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); }; diff --git a/wxPython/src/_window.i b/wxPython/src/_window.i index 5c83b625f0..450d476f26 100644 --- a/wxPython/src/_window.i +++ b/wxPython/src/_window.i @@ -2072,9 +2072,15 @@ opaque.", ""); self.thisown = pre.thisown pre.thisown = 0 if hasattr(self, '_setOORInfo'): - self._setOORInfo(self) + try: + self._setOORInfo(self) + except TypeError: + pass if hasattr(self, '_setCallbackInfo'): - self._setCallbackInfo(self, pre.__class__) + try: + self._setCallbackInfo(self, pre.__class__) + except TypeError: + pass } %pythoncode { diff --git a/wxPython/src/aui.i b/wxPython/src/aui.i index a5b3ff5f00..1609c74f52 100755 --- a/wxPython/src/aui.i +++ b/wxPython/src/aui.i @@ -306,6 +306,7 @@ The following example shows a simple implementation that utilizes // A wxDocArt class that knows how to forward virtuals to Python methods class wxPyAuiDockArt : public wxAuiDefaultDockArt { +public: wxPyAuiDockArt() : wxAuiDefaultDockArt() {} DEC_PYCALLBACK_INT_INT(GetMetric); @@ -479,6 +480,7 @@ methods to the Python methods implemented in the derived class.", ""); class wxPyAuiDockArt : public wxAuiDefaultDockArt { +public: %pythonAppend wxPyAuiDockArt setCallbackInfo(PyAuiDockArt) wxPyAuiDocArt(); @@ -527,6 +529,7 @@ class wxPyAuiDockArt : public wxAuiDefaultDockArt // A wxTabArt class that knows how to forward virtuals to Python methods class wxPyAuiTabArt : public wxAuiDefaultTabArt { +public: wxPyAuiTabArt() : wxAuiDefaultTabArt() {} @@ -734,6 +737,7 @@ methods to the Python methods implemented in the derived class.", ""); class wxPyAuiTabArt : public wxAuiDefaultTabArt { +public: %pythonAppend wxPyAuiTabArt setCallbackInfo(PyAuiTabArt) wxPyAuiTabArt(); diff --git a/wxPython/src/grid.i b/wxPython/src/grid.i index 4b63e19d07..2574e9edb4 100644 --- a/wxPython/src/grid.i +++ b/wxPython/src/grid.i @@ -1606,7 +1606,7 @@ public: def __str__(self): return str(self.Get()) def __repr__(self): return 'wxGridCellCoords'+str(self.Get()) def __len__(self): return len(self.Get()) - def __getitem__(self, index): return self.asTuple()[index] + def __getitem__(self, index): return self.Get()[index] def __setitem__(self, index, val): if index == 0: self.SetRow(val) elif index == 1: self.SetCol(val) diff --git a/wxPython/wx/lib/customtreectrl.py b/wxPython/wx/lib/customtreectrl.py index 76f3501711..87313192a2 100644 --- a/wxPython/wx/lib/customtreectrl.py +++ b/wxPython/wx/lib/customtreectrl.py @@ -1790,7 +1790,9 @@ class CustomTreeCtrl(wx.PyScrolledWindow): btnshadow = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNSHADOW) self._hilightUnfocusedBrush = wx.Brush(btnshadow) r, g, b = btnshadow.Red(), btnshadow.Green(), btnshadow.Blue() - backcolour = ((r >> 1) - 20, (g >> 1) - 20, (b >> 1) - 20) + backcolour = (max((r >> 1) - 20, 0), + max((g >> 1) - 20, 0), + max((b >> 1) - 20, 0)) backcolour = wx.Colour(backcolour[0], backcolour[1], backcolour[2]) self._hilightUnfocusedBrush2 = wx.Brush(backcolour) diff --git a/wxPython/wx/lib/mixins/inspect.py b/wxPython/wx/lib/mixins/inspect.py index ba43aab498..b6a5f82c61 100644 --- a/wxPython/wx/lib/mixins/inspect.py +++ b/wxPython/wx/lib/mixins/inspect.py @@ -15,11 +15,11 @@ # wxPython-users mail list by Dan Eloff. import wx -import wx.py -import wx.stc -import sys +from wx.lib.inspect import InspectionTool +#---------------------------------------------------------------------------- + class InspectionMixin(object): """ This class is intended to be used as a mix-in with the wx.App @@ -35,22 +35,18 @@ class InspectionMixin(object): InspectionMixin and then call the `Init` method from the app's OnInit. """ - def Init(self, pos=(-1, -1), size=(850,700), config=None, locals=None, + def Init(self, pos=wx.DefaultPosition, size=wx.Size(850,700), + config=None, locals=None, alt=True, cmd=True, shift=False, keyCode=ord('I')): """ Make the event binding that will activate the InspectionFrame window. """ self.Bind(wx.EVT_KEY_DOWN, self._OnKeyPress) - self._tool = None - self._pos = pos - self._size = size - self._config = config - self._locals = locals self._alt = alt self._cmd = cmd self._shift = shift self._keyCode = keyCode - + InspectionTool().Init(pos, size, config, locals, self) def _OnKeyPress(self, evt): """ @@ -69,712 +65,24 @@ class InspectionMixin(object): def ShowInspectionTool(self): """ - Show the Inspection tool, creating it if neccesary. + Show the Inspection tool, creating it if neccesary, setting it + to display the widget under the cursor. """ - if not self._tool: - self._tool = InspectionFrame(parent=self.GetTopWindow(), - pos=self._pos, - size=self._size, - config=self._config, - locals=self._locals, - app=self) # get the current widget under the mouse wnd = wx.FindWindowAtPointer() - self._tool.SetObj(wnd) - - self._tool.Show() - self._tool.Raise() + InspectionTool().Show(wnd) #--------------------------------------------------------------------------- -class InspectionFrame(wx.Frame): +class InspectableApp(wx.App, InspectionMixin): """ - This class is the frame that holds the wxPython inspection tools. - The toolbar and splitter windows are also managed here. The - contents of the splitter windows are handled by other classes. + A simple mix of wx.App and InspectionMixin that can be used stand-alone. """ - def __init__(self, wnd=None, locals=None, config=None, - app=None, title="wxPython Widget Inspection Tool", - *args, **kw): - kw['title'] = title - wx.Frame.__init__(self, *args, **kw) - - self.includeSizers = False - self.started = False - - self.MacSetMetalAppearance(True) - self.MakeToolBar() - - self.outerSplitter = wx.SplitterWindow(self,style=wx.SP_LIVE_UPDATE) - self.innerSplitter = wx.SplitterWindow(self.outerSplitter,style=wx.SP_LIVE_UPDATE) - self.tree = InspectionTree(self.outerSplitter) - self.info = InspectionInfoPanel(self.innerSplitter) - - if not locals: - locals = {} - myIntroText = ( - "Python %s on %s\nNOTE: The 'obj' variable refers to the selected object." - % (sys.version.split()[0], sys.platform)) - self.crust = wx.py.crust.Crust(self.innerSplitter, locals=locals, - intro=myIntroText, - showInterpIntro=False, - ) - self.crust.shell.SetMarginWidth(1, 0) - self.locals = self.crust.shell.interp.locals - self.crust.shell.interp.introText = '' - self.locals['obj'] = self.obj = wnd - self.locals['app'] = app - self.locals['wx'] = wx - wx.CallAfter(self._postStartup) - - self.innerSplitter.SplitHorizontally(self.info, self.crust, -225) - self.outerSplitter.SplitVertically(self.tree, self.innerSplitter, 280) - self.outerSplitter.SetMinimumPaneSize(20) - self.innerSplitter.SetMinimumPaneSize(20) - - - def MakeToolBar(self): - tbar = self.CreateToolBar(wx.TB_HORIZONTAL | wx.TB_FLAT | wx.TB_TEXT | wx.NO_BORDER ) - tbar.SetToolBitmapSize((24,24)) - - refreshBmp = getRefreshBitmap() - findWidgetBmp = getFindBitmap() - showSizersBmp = getShowSizersBitmap() - toggleFillingBmp = getShowFillingBitmap() - - refreshTool = tbar.AddLabelTool(-1, 'Refresh', refreshBmp, - shortHelp = 'Refresh widget tree') - findWidgetTool = tbar.AddLabelTool(-1, 'Find', findWidgetBmp, - shortHelp='Find new target widget. Click here and\nthen on another widget in the app.') - showSizersTool = tbar.AddLabelTool(-1, 'Sizers', showSizersBmp, - shortHelp='Include sizers in widget tree', - kind=wx.ITEM_CHECK) - toggleFillingTool = tbar.AddLabelTool(-1, 'Filling', toggleFillingBmp, - shortHelp='Show PyCrust \'filling\'', - kind=wx.ITEM_CHECK) - tbar.Realize() - - self.Bind(wx.EVT_TOOL, self.OnRefreshTree, refreshTool) - self.Bind(wx.EVT_TOOL, self.OnFindWidget, findWidgetTool) - self.Bind(wx.EVT_TOOL, self.OnShowSizers, showSizersTool) - self.Bind(wx.EVT_TOOL, self.OnToggleFilling, toggleFillingTool) - self.Bind(wx.EVT_UPDATE_UI, self.OnShowSizersUI, showSizersTool) - self.Bind(wx.EVT_UPDATE_UI, self.OnToggleFillingUI, toggleFillingTool) - - - - def _postStartup(self): - if self.crust.ToolsShown(): - self.crust.ToggleTools() - self.UpdateInfo() - self.started = True - - def UpdateInfo(self): - self.info.Update(self.obj) - - def SetObj(self, obj): - if self.obj is obj: - return - self.locals['obj'] = self.obj = obj - self.UpdateInfo() - if not self.tree.built: - self.tree.BuildTree(obj, includeSizers=self.includeSizers) - else: - self.tree.SelectObj(obj) - - - def RefreshTree(self): - self.tree.BuildTree(self.obj, includeSizers=self.includeSizers) - - - def OnRefreshTree(self, evt): - self.RefreshTree() - - - def OnFindWidget(self, evt): - self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) - self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self.OnCaptureLost) - self.CaptureMouse() - self.finding = wx.BusyInfo("Click on any widget in the app...") - - def OnCaptureLost(self, evt): - self.Unbind(wx.EVT_LEFT_DOWN) - self.Unbind(wx.EVT_MOUSE_CAPTURE_LOST) - del self.finding - - def OnLeftDown(self, evt): - self.ReleaseMouse() - wnd = wx.FindWindowAtPointer() - if wnd is not None: - self.SetObj(wnd) - else: - wx.Bell() - self.OnCaptureLost(evt) - - - def OnShowSizers(self, evt): - self.includeSizers = not self.includeSizers - self.RefreshTree() - - - def OnToggleFilling(self, evt): - self.crust.ToggleTools() - - - def OnShowSizersUI(self, evt): - evt.Check(self.includeSizers) - - - def OnToggleFillingUI(self, evt): - if self.started: - evt.Check(self.crust.ToolsShown()) - + def OnInit(self): + self.Init() + return True #--------------------------------------------------------------------------- -# should inspection frame (and children) be includeed in the tree? -INCLUDE_INSPECTOR = True - -class InspectionTree(wx.TreeCtrl): - """ - All of the widgets in the app, and optionally their sizers, are - loaded into this tree. - """ - def __init__(self, *args, **kw): - #s = kw.get('style', 0) - #kw['style'] = s | wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT - wx.TreeCtrl.__init__(self, *args, **kw) - self.roots = [] - self.built = False - self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelectionChanged) - - - def BuildTree(self, startWidget, includeSizers=False): - if self.GetCount(): - self.DeleteAllItems() - self.roots = [] - self.built = False - - realRoot = self.AddRoot('Top-level Windows') - - for w in wx.GetTopLevelWindows(): - if w is wx.GetTopLevelParent(self) and not INCLUDE_INSPECTOR: - continue - root = self._AddWidget(realRoot, w, includeSizers) - self.roots.append(root) - - # Expand the subtree containing the startWidget, and select it. - if not startWidget or not isinstance(startWidget, wx.Window): - startWidget = wx.GetApp().GetTopWindow() - top = wx.GetTopLevelParent(startWidget) - topItem = self.FindWidgetItem(top) - if topItem: - self.ExpandAllChildren(topItem) - self.SelectObj(startWidget) - self.built = True - - - def _AddWidget(self, parentItem, widget, includeSizers): - text = self.GetTextForWidget(widget) - item = self.AppendItem(parentItem, text) - self.SetItemPyData(item, widget) - - # Add the sizer and widgets in the sizer, if we're showing them - widgetsInSizer = [] - if includeSizers and widget.GetSizer() is not None: - widgetsInSizer = self._AddSizer(item, widget.GetSizer()) - - # Add any children not in the sizer, or all children if we're - # not showing the sizers - for child in widget.GetChildren(): - if not child in widgetsInSizer and not child.IsTopLevel(): - self._AddWidget(item, child, includeSizers) - - return item - - - def _AddSizer(self, parentItem, sizer): - widgets = [] - text = self.GetTextForSizer(sizer) - item = self.AppendItem(parentItem, text) - self.SetItemPyData(item, sizer) - self.SetItemTextColour(item, "blue") - - for si in sizer.GetChildren(): - if si.IsWindow(): - w = si.GetWindow() - self._AddWidget(item, w, True) - widgets.append(w) - elif si.IsSizer(): - widgets += self._AddSizer(item, si.GetSizer()) - else: - i = self.AppendItem(item, "Spacer") - self.SetItemPyData(i, si) - self.SetItemTextColour(i, "blue") - return widgets - - - def FindWidgetItem(self, widget): - """ - Find the tree item for a widget. - """ - for item in self.roots: - found = self._FindWidgetItem(widget, item) - if found: - return found - return None - - def _FindWidgetItem(self, widget, item): - if self.GetItemPyData(item) is widget: - return item - child, cookie = self.GetFirstChild(item) - while child: - found = self._FindWidgetItem(widget, child) - if found: - return found - child, cookie = self.GetNextChild(item, cookie) - return None - - - def GetTextForWidget(self, widget): - """ - Returns the string to be used in the tree for a widget - """ - return "%s (\"%s\")" % (widget.__class__.__name__, widget.GetName()) - - def GetTextForSizer(self, sizer): - """ - Returns the string to be used in the tree for a sizer - """ - return "%s" % sizer.__class__.__name__ - - - def SelectObj(self, obj): - item = self.FindWidgetItem(obj) - if item: - self.EnsureVisible(item) - self.SelectItem(item) - - - def OnSelectionChanged(self, evt): - obj = self.GetItemPyData(evt.GetItem()) - toolFrm = wx.GetTopLevelParent(self) - toolFrm.SetObj(obj) - - -#--------------------------------------------------------------------------- - -class InspectionInfoPanel(wx.stc.StyledTextCtrl): - """ - Used to display information about the currently selected items. - Currently just a read-only wx.stc.StyledTextCtrl with some plain - text. Should probably add some styles to make things easier to - read. - """ - def __init__(self, *args, **kw): - wx.stc.StyledTextCtrl.__init__(self, *args, **kw) - - from wx.py.editwindow import FACES - self.StyleSetSpec(wx.stc.STC_STYLE_DEFAULT, - "face:%(mono)s,size:%(size)d,back:%(backcol)s" % FACES) - self.StyleClearAll() - self.SetReadOnly(True) - self.SetMarginType(1, 0) - self.SetMarginWidth(1, 0) - self.SetSelForeground(True, wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) - self.SetSelBackground(True, wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)) - - - def Update(self, obj): - st = [] - if not obj: - st.append("Item is None or has been destroyed.") - - elif isinstance(obj, wx.Window): - st += self.FmtWidget(obj) - - elif isinstance(obj, wx.Sizer): - st += self.FmtSizer(obj) - - elif isinstance(obj, wx.SizerItem): - st += self.FmtSizerItem(obj) - - self.SetReadOnly(False) - self.SetText('\n'.join(st)) - self.SetReadOnly(True) - - - def Fmt(self, name, value): - if isinstance(value, (str, unicode)): - return " %s = '%s'" % (name, value) - else: - return " %s = %s" % (name, value) - - - def FmtWidget(self, obj): - st = ["Widget:"] - st.append(self.Fmt('name', obj.GetName())) - st.append(self.Fmt('class', obj.__class__)) - st.append(self.Fmt('bases', obj.__class__.__bases__)) - st.append(self.Fmt('id', obj.GetId())) - st.append(self.Fmt('style', obj.GetWindowStyle())) - st.append(self.Fmt('pos', obj.GetPosition())) - st.append(self.Fmt('size', obj.GetSize())) - st.append(self.Fmt('minsize', obj.GetMinSize())) - st.append(self.Fmt('bestsize', obj.GetBestSize())) - st.append(self.Fmt('client size',obj.GetClientSize())) - st.append(self.Fmt('IsEnabled', obj.IsEnabled())) - st.append(self.Fmt('IsShown', obj.IsShown())) - st.append(self.Fmt('fg color', obj.GetForegroundColour())) - st.append(self.Fmt('bg color', obj.GetBackgroundColour())) - st.append(self.Fmt('label', obj.GetLabel())) - if hasattr(obj, 'GetTitle'): - st.append(self.Fmt('title', obj.GetTitle())) - if hasattr(obj, 'GetValue'): - st.append(self.Fmt('value', obj.GetValue())) - if obj.GetContainingSizer() is not None: - st.append('') - sizer = obj.GetContainingSizer() - st += self.FmtSizerItem(sizer.GetItem(obj)) - return st - - - def FmtSizerItem(self, obj): - st = ['SizerItem:'] - st.append(self.Fmt('proportion', obj.GetProportion())) - st.append(self.Fmt('flag', - FlagsFormatter(itemFlags, obj.GetFlag()))) - st.append(self.Fmt('border', obj.GetBorder())) - st.append(self.Fmt('pos', obj.GetPosition())) - st.append(self.Fmt('size', obj.GetSize())) - st.append(self.Fmt('minsize', obj.GetMinSize())) - st.append(self.Fmt('ratio', obj.GetRatio())) - st.append(self.Fmt('IsWindow', obj.IsWindow())) - st.append(self.Fmt('IsSizer', obj.IsSizer())) - st.append(self.Fmt('IsSpacer', obj.IsSpacer())) - st.append(self.Fmt('IsShown', obj.IsShown())) - if isinstance(obj, wx.GBSizerItem): - st.append(self.Fmt('cellpos', obj.GetPos())) - st.append(self.Fmt('cellspan', obj.GetSpan())) - st.append(self.Fmt('endpos', obj.GetEndPos())) - return st - - - def FmtSizer(self, obj): - st = ['Sizer:'] - st.append(self.Fmt('class', obj.__class__)) - st.append(self.Fmt('pos', obj.GetPosition())) - st.append(self.Fmt('size', obj.GetSize())) - st.append(self.Fmt('minsize', obj.GetMinSize())) - if isinstance(obj, wx.BoxSizer): - st.append(self.Fmt('orientation', - FlagsFormatter(orientFlags, obj.GetOrientation()))) - if isinstance(obj, wx.GridSizer): - st.append(self.Fmt('cols', obj.GetCols())) - st.append(self.Fmt('rows', obj.GetRows())) - st.append(self.Fmt('vgap', obj.GetVGap())) - st.append(self.Fmt('hgap', obj.GetHGap())) - if isinstance(obj, wx.FlexGridSizer): - st.append(self.Fmt('rowheights', obj.GetRowHeights())) - st.append(self.Fmt('colwidths', obj.GetColWidths())) - st.append(self.Fmt('flexdir', - FlagsFormatter(orientFlags, obj.GetFlexibleDirection()))) - st.append(self.Fmt('nonflexmode', - FlagsFormatter(flexmodeFlags, obj.GetNonFlexibleGrowMode()))) - if isinstance(obj, wx.GridBagSizer): - st.append(self.Fmt('emptycell', obj.GetEmptyCellSize())) - - if obj.GetContainingWindow(): - si = obj.GetContainingWindow().GetSizer().GetItem(obj) - if si: - st.append('') - st += self.FmtSizerItem(si) - return st - - -class FlagsFormatter(object): - def __init__(self, d, val): - self.d = d - self.val = val - - def __str__(self): - st = [] - for k in self.d.keys(): - if self.val & k: - st.append(self.d[k]) - if st: - return '|'.join(st) - else: - return '0' - -orientFlags = { - wx.HORIZONTAL : 'wx.HORIZONTAL', - wx.VERTICAL : 'wx.VERTICAL', - } - -itemFlags = { - wx.TOP : 'wx.TOP', - wx.BOTTOM : 'wx.BOTTOM', - wx.LEFT : 'wx.LEFT', - wx.RIGHT : 'wx.RIGHT', -# wx.ALL : 'wx.ALL', - wx.EXPAND : 'wx.EXPAND', -# wx.GROW : 'wx.GROW', - wx.SHAPED : 'wx.SHAPED', - wx.STRETCH_NOT : 'wx.STRETCH_NOT', - wx.ALIGN_CENTER : 'wx.ALIGN_CENTER', - wx.ALIGN_LEFT : 'wx.ALIGN_LEFT', - wx.ALIGN_RIGHT : 'wx.ALIGN_RIGHT', - wx.ALIGN_TOP : 'wx.ALIGN_TOP', - wx.ALIGN_BOTTOM : 'wx.ALIGN_BOTTOM', - wx.ALIGN_CENTER_VERTICAL : 'wx.ALIGN_CENTER_VERTICAL', - wx.ALIGN_CENTER_HORIZONTAL : 'wx.ALIGN_CENTER_HORIZONTAL', - wx.ADJUST_MINSIZE : 'wx.ADJUST_MINSIZE', - wx.FIXED_MINSIZE : 'wx.FIXED_MINSIZE', - } - -flexmodeFlags = { - wx.FLEX_GROWMODE_NONE : 'wx.FLEX_GROWMODE_NONE', - wx.FLEX_GROWMODE_SPECIFIED : 'wx.FLEX_GROWMODE_SPECIFIED', - wx.FLEX_GROWMODE_ALL : 'wx.FLEX_GROWMODE_ALL', - } - -#--------------------------------------------------------------------------- -from wx import ImageFromStream, BitmapFromImage -import cStringIO - - -def getRefreshData(): - return \ -'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x18\x00\x00\x00\x18\x08\x06\ -\x00\x00\x00\xe0w=\xf8\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ -\x05\xe8IDATH\x89\x9d\x96]h\x94\xd9\x19\xc7\x7f\xefG21\x93\x99Il\xcc&\x18w\ -\x1c?\xe2GK\xa5kb\x8d\xd3(+\xcb\xd2-\x0b-4A\xf1\xc6\xcb\x8a\xdaz\xa7\xd8\x9b\ -zQ\xe8\x85R\xd3\xd0\x1a\x97\x06w\xad\xa8\x14/z%\x85\xd2\x85\xe2\x17\xedEK\ -\x83\xd4\xc4X\x1b\x9bL\x98L\xdf\xc9d\xbe\'\x99\xc9{\xfe\xbd\xc8$\xc4e\xa1\ -\xd0\x07\x0e\x1c\x0e\xcf\xc7y\xfe\xe7\xff<\xcf\xb1\xf8\xdfr\x008\x03|\x0bp\ -\x00\x0b\xf0\x81\xa7\xc0\'\xc0\xdf\xbe\xccH\xabz\xb8\x1b\xce\x9c\xba!\xc0\ -\x07\xc0\xbf\x81\x92\xe38\xef\xf8\xbe\xff.\xf0\xb5\xae\xae\xae%\x80d2\xd9\ -\xd4\xd0\xd0\x90\xd9\xb9s\xe7\xf6\xc9\xc9\xc9y\xa0\x19\x88\x01\x9f\x03\x06p,\ -\xf0\x05\x96\xfb\x05\xe7[\x80\x9f\xb9\xae{d\xeb\xd6\xad%\xd7u\x7f\xf0\xfa\ -\xf5\xeb\xd7\xb6m[\x03\x03\x03\x0c\x0e\x0e6Y\x96\xc5\x83\x07\x0f\x98\x98\x98\ -h\xf4}?\x01\x84c\xb1\xd8\'\xb3\xb3\xb3\x1d+++\x7f\x06~\x0c$\xd7\x82l\xccj\ -\x8b\xe38\xf7W\xb3[_\x9f\x02W\x81\x7f\x0e\r\r)\x95J\xa9\\.\xeb\xf4\xe9\xd3\ -\x02fC\xa1\xd0\xcd\xb6\xb6\xb6\xcf6\xda\xd8\xb6\xfd\x00\xe8\xfc2\xd8\xc6\x00\ -\x85B!\xf5\xf6\xf6\x9aC\x87\x0e\x99\xd6\xd6V\x01joo\xd7\xcd\x9b7\xfdt:\xadR\ -\xa9\xa4\xb1\xb11?\x14\n\t\xd0\xbe}\xfb\xd4\xdb\xdb\xab\xde\xde^\x13\x0e\x87\ -\xd7\x02\xfd\xa6\x8e\xca\xba|\xe08\xce?\x00\x1d\xda\x18\xa0g\xfb\xf6\xed\xcf\ -\x00\xf5\xf5\xf5\xc9\xf3<%\x12\t%\x93I\xcd\xcc\xcc(\x95J\xa9T*)\x9f\xcf+\x97\ -\xcb\xa9X,*\x95JiffF\xc9dR\x89DB\x8b\x8b\x8b\x1a\x18\x180\x80\xa2\xd1\xe8\ -\xdf\x81\xfdlH\xa31\x9b\xcd~\xde\xd6\xd6\x16\t\x04\x02_\xf7<\x8fx\x81e\xd7\x03lO\ -\xcc\xcdm^#M\xa5R!\x18\x0cr\xfd\xfau\xa2\xd1(W\xaf^\xa5\xa5\xa5\x85r\xb9\x0c\ -@KK\x0b7n\xdc \x1a\x8dr\xed\xda5\x9a\x9a\x9aXZZB\x92\x00\x12\x89\xc4\x16 f\ -\x81\x10XC\xab=\xe9\xd3:\x86\xea\xef\xef7\xf1x\xdc\xec\xdf\xbf_\x80ZZZ466\ -\xe6\xe7\xf3ye\xb3Y\xdd\xb9s\xc7\xef\xec\xec\x14\xa0\xd6\xd6V\xc5\xe3q\xc5\ -\xe3\xf1\xf5\xf6\x0e\xdc\x05\x1aW\xaf[\xaf\x03\xa0\xab>,\xd6\x0b\xaa\xb5\xb5\ -\xf5\xb7\xe1p\xf8\xd7\xc0\xec\x89\x13\'\x94\xcb\xe5\x94\xc9dt\xea\xd4)\x01o\ -\x80_\x02\x9fm\xb4q]\xf7w@\xf7\x9ao\x17\xe0 4\xfc\x15\x92\xc6\x98\x1f\x02\ -\x15\xd7u\xbf\xd9\xdd\xdd\x9d\x7f\xf3\xe6\xcdOw\xef\xde\xed477\xefK&\x93\xdd\ -w\xef\xde\xc5u]<\xcf\xc3\xb6\xed\x97\xc6\x98\x91X,\xd6$\xe9\xabsssm\xb5Z\xed\ -/+++\x97\x80\x04\xab\xa8\x18~\x02v=\x8b\x8d\xf3\xf9\xa3:m\xb7\xf6\xf4\xf4|/\ -\x10\x08\xfc\tPww\xf7\xf2\xb6m\xdb\x96\x1d\xc7\x11\xf0\x07\xc7q\xbe\r\xbc\ -\x0b\xec\x05\xbe\xb3\x0eK}\x0c\xacgp\x05,\xad\x0eh\x0b0\x16\xfc~\x8d^SSS\xed\ -\xc0\x04\xf0\x95D"\xb1\xf1\xdb2\xed\xfb\xfe\x7f\x80\x99\xba\xead\xfd\xa2\x16\ -\xab?\x0b\x0b\xe0\xbf\xf5\x19yJo\xfcW\xe3\x00\x00\x00\x00IEND\xaeB`\x82' - -def getRefreshBitmap(): - return BitmapFromImage(getRefreshImage()) - -def getRefreshImage(): - stream = cStringIO.StringIO(getRefreshData()) - return ImageFromStream(stream) - -#---------------------------------------------------------------------- -def getFindData(): - return \ -'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x18\x00\x00\x00\x18\x08\x06\ -\x00\x00\x00\xe0w=\xf8\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ -\x06\x04IDATH\x89\xb5\x95Mh\x1b\xdb\x15\xc7\xffs\xe7\x8e4\xfa@V%K\xc6\r\x91\ -\x12^\xeb$d\xf3\x08\xc1V\xa8\xc9\xb3i\xe2x\x97\x10(]$\xf0\xc0!i> i\xc0\x8bR(\ -\xcf\xdd\xb4\xf1\xaad\xd7E\x9cdS\x08\xdd\x98.\x82\xbc0\xe9\xc3q)\xc6\xa4v\ -\x82\xbf\x82\x15;\x93\x91,[c\xcb\x965\xdfsgn\x17\x0f\xf9\xb9\xa4o\xd7\x1e\ -\x18\xb8w8s\x7f\xf7\xf0\xff\x9f3\xc0\xff9\x84\xc3\x9b\xb1\xb1\xb1\xdf\xf8\ -\xbe\xff\xc7\xd7\xaf_C\x92$\x00\x80\xe388u\xea\x14\xb2\xd9\xec\xb7\xb7n\xdd\ -\xea\x07\x80\'O\x9e\x145M\x1b\\XX@8\x1c\x06\x00x\x9e\x87\xde\xde^PJ\x7f\x7f\ -\xe3\xc6\x8d\x91\xcfH\xe3\xe3\xe3\xc3\xf7\xee\xddc\xf9|\x9e\x038xB\xa1\x10/\ -\x14\n\xfc\xfa\xf5\xeb\x7fo\xe5^\xbbv\xad\xd8\xdb\xdb{\x90C\x08\xe1\xa2(\xf2\ -\\.\xc7o\xdf\xbe\xcd\xc6\xc7\xc7\x7f\xdb\xca\xa5\xad\x85\xef\xfb_\x11B\xc4\ -\xcd\xcdMv\xf5\xeaUZ(\x14P.\x97\xf1\xfc\xf9s\xcc\xcd\xcdA\x10\x04\xab\x95\ -\xbb\xb6\xb6f\xce\xcc\xcc\xe0\xf4\xe9\xd3\xb8s\xe7\x0e&\'\'Q\xab\xd50;;\xcb\ -\x04A\xa0\x8c\xb1~\x00\x7f\xf8\x0f\x00\xa5t\xbb^\xaf#\x91H\xd0\x0b\x17.\xe0\ -\xca\x95+X[[\xc3\xabW\xaf\xf0\xe9\xd3\'tuu}q\xe6\xcc\x99\xaf\t!\xac\xd9l\x9e\ -x\xf3\xe6\rN\x9e<\x89\x9b7o\x82R\nUUQ*\x95\xe8\xee\xee.(\xa5\xdb\x9fU \xcb2\ -\x18c\xd04\r333\xd8\xda\xda\x82\xef\xfb\xd8\xde\xde\x86,\xcb,\x9dNwy\x9e\xf7\ -\\\x10\x04\xa4R)$\x93Io~~^z\xfc\xf81\x16\x17\x17!\x08\x024M\x83m\xdb\x08\x85\ -B\xf8\x0c\xe0\xba.8\xe7 \x84@\x14E\xd4\xebuX\x96\x85 \x08\x10\x04\x01U\x14%0\ -M\xd3\x01\x80X,\x16\xe6\x9cK\xb6mcuu\x15\x9a\xa6!\x9dN\x1f\x18\x831v\x00 \ -\xad\xc5\x87\x0f\x1f\x9a\x8a\xa2@\x14Ed\xb3Yx\x9e\x87b\xb1\x08\xc7q\xd0\xd3\ -\xd3\x83l6\xfb\x8fb\xb1\x18-\x16\x8b\xd1l6\xfb\xea\xdc\xb9s0\x0c\x03\x13\x13\ -\x138v\xec\x18\x18cp]\x17\xd5j\x15+++\x07\x00\x11\x00\xee\xde\xbd\xfb\xbb\ -\xb7o\xdf\xde\x92e9\xd2\xdd\xdd\r]\xd7111\x81J\xa5\x02Y\x96q\xf6\xecY\xd8\ -\xb6M\xdf\xbd{w\x04\xc0\x85\xae\xae\xae\xaf\x92\xc9d\xdb\xd2\xd2\x12j\xb5\ -\x1a4MC>\x9fGGG\x07$I\x82\xaa\xaa\xd3\xa5R\xe9\xe5\x01\xa0\xbb\xbb\xfbo\xab\ -\xab\xab?\xda\xda\xdab\xc9d\x92\xcc\xce\xceBQ\x14\xc8\xb2\x8c\\.\xc7\xc2\xe1\ -0\xd1u=a\x9a\xe6\xb9x<\xfe\xb3x<\xde\xe6\xba.\x0c\xc3`\xf5z\x9d\xec\xed\xedA\ -\x14Ed2\x19\xa8\xaa\x8ar\xb9\xdcv\xff\xfe\xfd\xad\xa9\xa9\xa9E\n\x00\xe1p\ -\xf8c\xa5R\xf9\xd24MZ(\x14\xd0\xdf\xdf\x8fK\x97.AUU\xac\xaf\xaf\xd3\x85\x85\ -\x85R4\x1a-\xa7R\xa9>\x00(\x97\xcbS\x8dF\xa3#\x9f\xcf\x9f\x18\x18\x18\x80(\ -\x8a\xd0u\x1d\xd5j\x15\xef\xdf\xbf\xf7r\xb9\xdcO\x1b\x8d\xc6_\x00\xfc\x15\ -\x00\xf0\xf0\xe1\xc3\xb9T*\xc5\x07\x06\x06x\xadV\xe3\x86a\xf0\xf5\xf5u><<\ -\xcc\xdb\xda\xda8\x80a\x00\x91C\r\x98\x04p\xbb\xaf\xaf\x8f+\x8a\xc2\x9b\xcd&\ -\xd74\x8d\x8f\x8c\x8cpY\x96y.\x97\xe3\x0f\x1ep\x11!\x04\x94R\xe8\xba\x0eU\ -U\x11\x89DP*\x95\xa0\xebz\xcb\x19\x0c\x80{\xa8\xf1=\x00\xbe\xe38PU\x15\x86a`\ -cc\x03{{{\x90$\t\x82 \x80\x10\xf2\xbdM\x1d\xc7qL\xd3\x84\xa6i\xd8\xdc\xdc\ -\x84,\xcbX^^\x86i\x9a\xadY\xf3+\x00\x83\x87\x00\xe3\x00~\xec8\x0e*\x95\n<\ -\xcf\xc3\xca\xca\nvvv`\x9a&$I\x82\xe38.\x00\x88ccc#/^\xbc\xf89\x80x\xa1P@gg\ -\'l\xdbF\xb5ZE\xbd^\xc7\xf2\xf2\xb2\xc79\xef\xe8\xe9\xe9\xf9\xc9\xf1\xe3\xc7\ -\x91\xcf\xe7q\xf4\xe8\xd1/\xca\xe5r6\x91Hx\xdd\xdd\xdd\xa2\xeb\xba(\x97\xcb\ -\x90$\t\xed\xed\xedh4\x1a\xa8T*\xe2\xa3G\x8fb\x941\xf6\xcd\xe2\xe2".^\xbc\ -\xe8\x9f?\x7f^\xacV\xabH&\x93p\x1c\x07\x9cs\xd8\xb6-\xe5r9\x0c\x0e\x0en\xeb\ -\xba\xfe-\x80 \x1e\x8f\xf7U\xab\xd5\xaca\x18\x92i\x9ap\x1c\x07\xba\xae#\x1a\ -\x8d\xe2\xf2\xe5\xcb`\x8c\xf9/_\xbelg\x8c}C\xa6\xa7\xa7\xc19G&\x93\x11=\xcf\ -\xc3\xce\xce\x0el\xdb\xc6\xce\xce\x0e\x18c\xa0\x94\x82\x10\x82\xfd\xfd\xfd\ -\x7f\x8d\x8e\x8e\xfebtt\xf4\x97\xcdf\xf3\x9f\x94R\xb8\xae\x8bz\xbd\x0e\xdb\ -\xb6\xd1h4\xa0(\n,\xcbB&\x93\x11\x01`zz\x1a\xa4%\x8aeY`\x8c\x81\x10\x02\xc7q\ -@\x08\x81 |\xf7\xbb\xe0\x9c\x83s\x1e:\xa4A\xb85V\x04A\x80\xe38\x10\x04\x01\ -\xa1P\x08\x9e\xe7\xc1\xb2\xbe\x1b\xbc\x92$\xa1\xd5\x07(\x95J\x90e\x19\xae\ -\xebbww\x17\x86a\xc0\xf7}\xfcPPJa\x18\x06VWW\x11\n\x85`\x9a&,\xcb\xc2\xdc\ -\xdc\x1cJ\xa5\xd2\xc1\\\xa2\xad\x1b\x8a\xa2\x88T*\x85X,\x86L&\x83\x8f\x1f?"\ -\x08\x02\xc8\xb2\xfc_AA\x10\x80R\x8a\xce\xceNttt@UUloo\x831\x06\xcb\xb2\xbe\ -\xb7i$\x12A\x10\x04PU5XZZ"\xd1h\x14\xf1x\x1c\x8a\xa2 \x08\x02\xd4j5?\x9dN\ -\x8b\x00\xda\x0f\x1d\xdeN)E\xbd^\xf7\xe7\xe7\xe7\xc5t:\rUU\xd1l6\xc19\x87\ -\xa2(\x81\xef\xfb$\x12\x89\x80Z\x965\x7f\xe4\xc8\x91\x13\x1b\x1b\x1b\x91\xa9\ -\xa9)p\xce\x11\x04\xc1A\x89\x92$\x89\xf1x\x1c\x00\xa6Z\x00B\xc8\xebX,vV\x92$\ -qrr\x12\xbe\xefC\x92\xa4\xc3\xba\x91\xce\xceN\xc7\xb2\xace\x01\x00\x86\x86\ -\x86\xe6"\x91\xc8\x97-q\x0eG"\x91@\xa3\xd1\xf8\xf3\xb3g\xcf\xee\x1c~?44\xf4\ -\xa7D"\xf1\xeb\xfd\xfd\xfd\xcf\xbe\x91e\x19\xb6m\xaf<}\xfa\xf4\xd4\x0f\x8a\ -\xf8\xbf\x8a\x7f\x03\x7f_\x17\xc3%\x00\xe7\xe4\x00\x00\x00\x00IEND\xaeB`\x82\ -' - -def getFindBitmap(): - return BitmapFromImage(getFindImage()) - -def getFindImage(): - stream = cStringIO.StringIO(getFindData()) - return ImageFromStream(stream) - -#---------------------------------------------------------------------- -def getShowSizersData(): - return \ -'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x18\x00\x00\x00\x18\x08\x06\ -\x00\x00\x00\xe0w=\xf8\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ -\x04(IDATH\x89\xb5\x95Mh\\U\x14\xc7\x7f\xf7\xdey\xf7\xcd\xbcy\x99\xc9\xb43\ -\x93\x99\xc4iM\x02~\x97R\xa9Q(\x82\x16*\xb5\xeaFP\x8b;\x0b\xe2\xb6\xba(\xa8\ -\xa0\xe0F\x17"\xaeD\xa9\x8a\x04\x84\n]\x16\x05\xadt\xe1B\xa8H\x8a\x0bK\xc4\ -\xd6\x966\xb553\x93\xc9L\xf3\xe6\xcd\xfb\xb8\xd7EZ\x9b\xa6%)-\x1e\xb8\xab\ -\xcb\xff\xfc\xce=\xfc\xcf\xb9\xf0?\x87X\xe7\xfe\xc1R\xa9\xf4\xaa\xeb\xba\xdb\ -\xad\xb5\x8b\xd7\t\x85(\xc6q<\xd3j\xb5\x0e\x02\xbf\xdd\x16}lll\xbf7\xe4\x9d\ -\x92\xc8(Cf\xe1\xdaaAB\x94\xf3\xbd\xd3\xf5z\xfd\xc0Z92k]*\xa5\xee2=\xb3\xd9\ -\xdcg\x94y\xc1\x0c\xb3\x04(`\xae\x08\xdf\x0f\xb0\xcdh\xb3\xde\xa8\x1b\xb7\r\ -\x00B\x81\xe8\xb3\x05\x9f7\x1c\x98-\x816\xf0g\x15~\xbf\x08\xcdN`\x8c\xe9\xdf\ -\t`9b\xe0\xaf\x1c\xfc4\t\x19\x0b\x84`\xe3[\x92\xde\x1a \x05Z1\x9ci\x82\xb2Pr\ -\xc0\xc2\xfa\x1eY\x07 \xa5\xcc\xd9\x8c\xcd\xf3\x03p\xa2\x0f\x97\xcf\x02X\xa4\ -\x15tbp\xdc\xbc\x94\xd2[+\x87Z\xb3\xf04U\xd2\x95%\xdf\xf8\xa1j\x89f\x14\x86U\ -\xc2Tx}\xe7\xe4\x90?4g\xb5:\x11\x06\xfdo\xa2(\x9a\xbd-@\x14E\xedJ\xb9RP\xae\ -\xba\xa7\x9f\x86\x15\xadu\xe48N`\x14*_\xf0\xdb^.\xf7m\xb3\xd9<\x02\x04W$7\ -\xf4l-@\xaeX,N%I\xb2\xa7\xd7\xeb\xedJ\xd3tP.\x97\xa7}\xdf\xff\xb5\xdb\xedn\ -\x1d\x0c\x06\xf7Zk\x17\xb4\xd6\x97\x06\x83\xc1E\x96\xadpS\xc8\xcd\xa2\xa8\ -\x94z\xaeV\xab\x1d\xd2Z[\xaduk\xd3\xa6M\xef\x00\xdb\x81m\x8dF\xe3m\xd7u\xe7\ -\x1d\xc7\xb1###\x87\x95R\xcf\x03\xa5\xf5\x92^%+\xa5\xd4\xee\xb1\xb1\xb1O\x94\ -RK\x9e\xe7\x85\xe5r\xf9K\xe0\xb1\x15/~\xa4R\xa9|\x9e\xcf\xe7\x97\xa4\x94\xc1\ -\xe8\xe8\xe8A\xa5\xd43\\3\xcd\x7f\xaf\xb8\xa1E\xf9|~g\xa1Px\xa5\xd9l\xee\xd5\ -Z\xf7]\xd7=\x94$\xc9g\x83\xc1\xe08W\xcc\t\\\x00\xe6\xb4\xd6J\x081\xd9\xedv\ -\xa7J\xa5\x92\'\x84h\xc7q|ze>\x05\x8c4\x1a\x8d\x1d\xb5Zm\x8b\xef\xfb\x0f\'I\ -\xf2b\xbf\xdf\x7fVJ9_.\x97g\x93$9\xd2\xe9t\x8e\xb2<\r\xe2juq\x1c7\xb3\xd9l\ -\xb1T*\xd5\xc20TI\x92l\xd5Z\xfb\xd5j5;222\xe1\xfb\xfe\xf8\xe2\xe2bOx\x9ew\ -\xc0q\x9c\x971\xe9\x03\x12\xd3\t\x07Q\xa1\x1f%\xee\xb0\xe2g<\xbf\x90\x085c\ -\x92\xf8\xa3 \x08fVV\xe6y\xde\xd6\x8c\x94\xfbQj\xaa/M\x10/\xf4\xb6\x93u\x02\ -\'\xe7-(c6d\x91\xa7\xa38\x9e\xa6^\xaf\x1f\x93B$\x08eqr-\x94\x9e\xc7\xcd\xcfS\ -\x1a\xb5 \xedP\xde\xebOLL\xbc\xb6\xba\x95\xe3\xe3\xe3\xfb\xfc\xc2P\x1f\xb0%T\ -\xb8\x91Lg\x18uy\x03*\xc8\x81E\x8a\xb4^\xaf\x1f\xcb\x18c\x02a\xad\xe2\xa1]_\ -\xf1\xe9w\xd3\xfc8\x93\xc5u\xef\xc6\xcd|\xc8\xc7/y\x9c=\x11\x00\xd1ML\x11-\ -\xd94\xad\x91\xe9\x9fdj\xda`\x92\x90T\x8cR\xe8\xbd\xc9\xc9G?\x10\x17\x9e0\ -\xc6\x04\xd7V\x85\x10\x97\xd8\x81\xcf?\xdb\x9e$%O\x7fI!\xd7\x9cC,\x08\t\xf10\ -C\x01dw\x82\xaat\t\x83K\xc8\n\x10\xc2\xca]\x94\xda9R&\xb1\xbc\x8e\xa4\xcdP^#\ -\xe4\x9a\x00@d\x10)x\xe1,K\x93\x92\x8c? %\x8b\x06\xe8\x01d\x84\x109\x0bp\xfa\ -\xf8n\xf6\xbe\xe7S\x19\x85\xe0\xf2\x06\x10\xd0\x9e\x83\x0c\x1e,+\xae\xcb,\ -\x84\xa3\x85t:\xc4\xb9\xb7\xf8\xe5\xf1S\xa4n\x04lD3K\x0f,Y!D.c\x8c9\xa7\xb4>\ -C\xd8\xde#\x0e\xbf\x0b\xb0\xc0\x95\xf9\xb0\x90\xb7\xc5\xe1\xb3I\x92\xb4V\x03\ -\xe28n\xe7\x90\x7f,Jq\xff\xfb\xe2\xfc\x0e`\x89\xe5\x9d$\xb0hW\xe9\xb61\xe6\ -\x9c\x00\x9e\xaeV\xab{\xa5\x94\rk\xedu\xbf\x93\x10\xa2\x10\x04\xc1\xd1n\xb7\ -\xfb\x05p~\x15c\xd4\xf7\xfd}\xbe\xef?e\xad\xed\xad\xd2e\xd34\xfd{~~\xfe\xeb\ -\xf5z|\xc7\xf1/Y%\x9eF\x90EP\xda\x00\x00\x00\x00IEND\xaeB`\x82' - -def getShowSizersBitmap(): - return BitmapFromImage(getShowSizersImage()) - -def getShowSizersImage(): - stream = cStringIO.StringIO(getShowSizersData()) - return ImageFromStream(stream) - -#---------------------------------------------------------------------- -def getShowFillingData(): - return \ -"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x18\x00\x00\x00\x18\x08\x06\ -\x00\x00\x00\xe0w=\xf8\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ -\x01\x9eIDATH\x89\xed\x95\xcfJ\x02A\x1c\xc7?\xad\xbb\xb3\xb1-\x14\xae\x19E\ -\xed!\xf5)\xbaE\xbd@\x97\x0e\xdez\x84.\x82\xd7.\xbd\x81\xb7\x8e\xddD\x10*\ -\x83\x12z\x06\xa30<\x97\xb4\x14Ibh\xb3k\x17\x15u\xcdv\xadc\xdf\xd303\xdf\xef\ -g\x86\xdf\xfc\x81\x7f\xfd\xa0\xb9\xa1\xf6\x0e\xb0\x0b\xac\x00\xed\x19\xf3\ -\x04\xf0\x02\x94\x80+\x00uhp_U\xd5m)\xe52\xd0\x99\x11\xa0)\x8a\xfa\xeayrq\ -\x12`CJ\xb9~tt(67\xf78?\x7f\xc64\x83'\x9b\xe62\xb7\xb7g\\^\x1e/\x00\x1b\xfd\ -\xfea\xc0\x07\xf0a\x18I\xb1\xba\xba\x85m?b\x18\xc1\x01KKk<==\x0cr&\x01\x00\ -\xb8\xb9\xb9G\xd3\xae\xb1,\x07\xcf\x0b\x0e\xd0u\x0bM\xbb\x03\xe8~7\xa7\x00\ -\xbc\x15\n\xf9\xee\xac\xba\xb88\xeb\x02\xef\xbd,\x00\x94qJ\xbb\xfd\x19|\xd9\ -\x01\xbc>\x80\x10bf\xc0$\xaf\xaf\x06\x8dF\x03\x80f\xb3\x19*\xdc4\xcd\x81w* \ -\x97\xcbQ.\x97i\xb5Z\xa1\x00\x86aP\xab\xd5`\xac\xc8>@\xa5R\xa1Z\xad\xe2\x859\ -B\x80\xa2(t:\xfe\xfb\xe9\x03d2\x19\xd2\xe94\xf5z=\x14 \x1e\x8f\x93\xcf\xe7\ -\xc9f\xb3\xd3\x01\x89D\x82d2\x89m\xdb\xa1\x00B\x08R\xa9\x14\x8c\xbeo~\x80\ -\xae\xeb\x03CX\xf5\xbc#5\xf0\x1d\xd3h4\x1a:\xb8/\xcb\xb2`\xca\x0e\xe6\x81\ -\xf9b\xb1\x08\x80\xe38\xa1\xc2c\xb1\x18\xa5R\t@\xefe1N;\xf9\x8b\xe7:\x12\x89\ -\xbc\xba\xae{\x05\x1c\xc0\xe8\x0eN\xa5\x94\x0e\xbf\xfcp\\\xd7\xed\x7f8\xff\n\ -\xa6/8\xf7\xb7\xf5\xb4m\x07\xcd\x00\x00\x00\x00IEND\xaeB`\x82" - -def getShowFillingBitmap(): - return BitmapFromImage(getShowFillingImage()) - -def getShowFillingImage(): - stream = cStringIO.StringIO(getShowFillingData()) - return ImageFromStream(stream) - -#--------------------------------------------------------------------------- diff --git a/wxPython/wx/py/frame.py b/wxPython/wx/py/frame.py index 2ca5ec9061..904c1b01fb 100644 --- a/wxPython/wx/py/frame.py +++ b/wxPython/wx/py/frame.py @@ -646,7 +646,7 @@ class Frame(wx.Frame): def LoadSettings(self, config): - """Called be derived classes to load settings specific to the Frame""" + """Called by derived classes to load settings specific to the Frame""" pos = wx.Point(config.ReadInt('Window/PosX', -1), config.ReadInt('Window/PosY', -1)) diff --git a/wxPython/wxaddons/sized_controls.py b/wxPython/wxaddons/sized_controls.py index 446249efe5..04d74c1fc7 100644 --- a/wxPython/wxaddons/sized_controls.py +++ b/wxPython/wxaddons/sized_controls.py @@ -576,4 +576,4 @@ class SizedFrame(wx.Frame): self.SetAutoLayout(True) def GetContentsPane(self): - return self.mainPanel \ No newline at end of file + return self.mainPanel -- 2.45.2