]> git.saurik.com Git - wxWidgets.git/commitdiff
merge from 2.8 branch
authorRobin Dunn <robin@alldunn.com>
Wed, 7 Feb 2007 16:24:56 +0000 (16:24 +0000)
committerRobin Dunn <robin@alldunn.com>
Wed, 7 Feb 2007 16:24:56 +0000 (16:24 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

21 files changed:
wxPython/config.py
wxPython/demo/Dialog.py
wxPython/demo/DragImage.py
wxPython/demo/Main.py
wxPython/demo/SearchCtrl.py
wxPython/demo/SizedControls.py
wxPython/docs/CHANGES.html
wxPython/docs/CHANGES.txt
wxPython/samples/doodle/setup.py
wxPython/src/_combobox.i
wxPython/src/_event.i
wxPython/src/_gdicmn.i
wxPython/src/_graphics.i
wxPython/src/_toolbar.i
wxPython/src/_window.i
wxPython/src/aui.i
wxPython/src/grid.i
wxPython/wx/lib/customtreectrl.py
wxPython/wx/lib/mixins/inspect.py
wxPython/wx/py/frame.py
wxPython/wxaddons/sized_controls.py

index 334dda3009226905d16dc79b9f8663737bedae9b..2232b65debc4994408e3b565b291546b0568aa29 100644 (file)
@@ -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"
index 7bb49f85bc8fc8d466c56f49fc2661d744509a49..4c75b19c5bc7d94680eac1d376cd6d3e1462a6b6 100644 (file)
@@ -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()
index 2592c977286a77d481e60f69b61fc401195f906e..d8f7ef3458affcc013edb91217b840ef57aa4df8 100644 (file)
@@ -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)
index 64b08bba9b56b6b04e4191147b689733bf304405..c5ec3fa129c569f9baa9f1215c5f1aac92129bfb 100644 (file)
@@ -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
 
 
index 83edf2e7577cc5ac9f3c04ffb9874baaac8c7b71..c43a31c95549162e0fef01b71a274d742a4fe66c 100644 (file)
@@ -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() )
index 63b237a3e7f277a9ffc4aed9bf2ff985cbf45a68..857e88f4a79426290c71e28492d08cc4c2c37ff7 100644 (file)
@@ -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:])
+
index 76c422dbb0d212179b7c7e12609df8d854e62f95..dc1150e3a24c94a425f0b3f9190b549d7ba18f91 100644 (file)
 <div class="document" id="recent-changes-for-wxpython">
 <h1 class="title">Recent Changes for wxPython</h1>
 <div class="section">
-<h1><a id="id1" name="id1">2.8.1.1</a></h1>
-<ul class="simple">
-<li>19-Jan-2007</li>
-</ul>
-<p>wxMSW: Fix lack of spin control update event when control lost focus</p>
-<p>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.</p>
-<p>PyCrust now has an option for showing/hiding the notebook.</p>
-<p>wxMSW:  Corrected drawing of bitmaps for disabled menu items.</p>
-<p>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.</p>
-<p>Added wx.SearchCtrl.[Get|Set]DescriptiveText</p>
-<p>wxMac: Added support for the wx.FRAME_FLOAT_ON_PARENT style.</p>
-<p>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.</p>
-</div>
-<div class="section">
-<h1><a id="id2" name="id2">2.8.1.0</a></h1>
+<h1><a id="id1" name="id1">2.8.1.0</a></h1>
 <ul class="simple">
 <li>8-Jan-2006</li>
 </ul>
 <p>Added EVT_TASKBAR_CLICK and use it to show taskbar icon menu on right
 button release, not press, under MSW (bug 1623761)</p>
-<p>Added wx.TreeCtrl.CollapseAll[Children]() and IsEmpty() methods</p>
-<p>Fix wx.MDIChidFrame.GetPosition() (patch 1626610)</p>
-<p>Fix attribute memory leak in wx.grid.Grid::ShowCellEditControl() (patch
+<p>Added wxTreeCtrl::CollapseAll[Children]() and IsEmpty() methods;
+documented wxTreeItemId (patch 1622125)</p>
+<p>Fix wxMDIChidFrame::GetPosition() (patch 1626610)</p>
+<p>Fix attribute memory leak in wxGrid::ShowCellEditControl() (patch
 1629949)</p>
 <p>wxGTK: Fix for controls on a toolbar being the full height of the
 toolbar instead of their natural height.</p>
@@ -63,7 +34,7 @@ essentially implement the MDI interface using a normal wx.Frame and a
 wx.aui.AuiNotebook.</p>
 </div>
 <div class="section">
-<h1><a id="id3" name="id3">2.8.0.1</a></h1>
+<h1><a id="id2" name="id2">2.8.0.1</a></h1>
 <ul class="simple">
 <li>11-Dec-2006</li>
 </ul>
@@ -113,7 +84,7 @@ introduce native search widgets.</p>
 uses the native renderer to draw the button.</p>
 </div>
 <div class="section">
-<h1><a id="id4" name="id4">2.7.2.0</a></h1>
+<h1><a id="id3" name="id3">2.7.2.0</a></h1>
 <ul class="simple">
 <li>7-Nov-2006</li>
 </ul>
@@ -153,7 +124,7 @@ constructor to use it instead of the default ActiveMovie backend,
 (assuming the quicktime DLLs are available on the system.)</p>
 </div>
 <div class="section">
-<h1><a id="id5" name="id5">2.7.1.3</a></h1>
+<h1><a id="id4" name="id4">2.7.1.3</a></h1>
 <ul class="simple">
 <li>26-Oct-2006</li>
 </ul>
@@ -173,7 +144,7 @@ SystemOption to zero.  In a future release this will be the default.</p>
 the new wx.GraphicsContext and wx.GraphicsPath classes.</p>
 </div>
 <div class="section">
-<h1><a id="id6" name="id6">2.7.1.2</a></h1>
+<h1><a id="id5" name="id5">2.7.1.2</a></h1>
 <ul class="simple">
 <li>21-Oct-2006</li>
 </ul>
@@ -200,7 +171,7 @@ correctly with this.</li>
 <p>Fixed refcount leak in wx.Window.GetChildren.</p>
 </div>
 <div class="section">
-<h1><a id="id7" name="id7">2.7.1.1</a></h1>
+<h1><a id="id6" name="id6">2.7.1.1</a></h1>
 <ul class="simple">
 <li>18-Oct-2006</li>
 </ul>
@@ -463,7 +434,7 @@ wx.PaintDC or wx.BufferedPaintDC.  This uses the new
 wx.Window.IsDoubleBuffered method.</p>
 </div>
 <div class="section">
-<h1><a id="id8" name="id8">2.6.3.3</a></h1>
+<h1><a id="id7" name="id7">2.6.3.3</a></h1>
 <ul class="simple">
 <li>15-July-2006</li>
 </ul>
@@ -500,7 +471,7 @@ machines, but at least all compile errors and warnings related to it
 have been resolved.</p>
 </div>
 <div class="section">
-<h1><a id="id9" name="id9">2.6.3.2</a></h1>
+<h1><a id="id8" name="id8">2.6.3.2</a></h1>
 <ul class="simple">
 <li>3-April-2006</li>
 </ul>
@@ -534,7 +505,7 @@ already shown.</p>
 is selected only with the keyboard.</p>
 </div>
 <div class="section">
-<h1><a id="id10" name="id10">2.6.3.0</a></h1>
+<h1><a id="id9" name="id9">2.6.3.0</a></h1>
 <ul class="simple">
 <li>27-March-2006</li>
 </ul>
@@ -596,7 +567,7 @@ zoomed plot and move it around with a mouse drag.</p>
 <p>Added wx.StandardPaths.GetDocumentsDir() (patch 1214360)</p>
 </div>
 <div class="section">
-<h1><a id="id11" name="id11">2.6.2.1</a></h1>
+<h1><a id="id10" name="id10">2.6.2.1</a></h1>
 <ul class="simple">
 <li>10-Jan-2006</li>
 </ul>
@@ -765,7 +736,7 @@ be easy to accommodate, all you need to do is add a parenthesis
 pair:  (...x, y, ...) ---&gt;  (...(x,y), ...)</blockquote>
 </div>
 <div class="section">
-<h1><a id="id12" name="id12">2.6.1.0</a></h1>
+<h1><a id="id11" name="id11">2.6.1.0</a></h1>
 <ul class="simple">
 <li>4-June-2005</li>
 </ul>
@@ -793,7 +764,7 @@ calls.</p>
 change will get written at the next flush.</p>
 </div>
 <div class="section">
-<h1><a id="id13" name="id13">2.6.0.1</a></h1>
+<h1><a id="id12" name="id12">2.6.0.1</a></h1>
 <ul class="simple">
 <li>30-May-2005</li>
 </ul>
@@ -906,7 +877,7 @@ there is a range of allowed values (so a wx.SpinCtrl is used instead
 of a wx.TextCtrl.)</p>
 </div>
 <div class="section">
-<h1><a id="id14" name="id14">2.6.0.0</a></h1>
+<h1><a id="id13" name="id13">2.6.0.0</a></h1>
 <ul class="simple">
 <li>26-Apr-2005</li>
 </ul>
@@ -984,7 +955,7 @@ EVT_KEY_UP and EVT_TEXT events from its embedded text control.</p>
 </dl>
 </div>
 <div class="section">
-<h1><a id="id15" name="id15">2.5.5.1</a></h1>
+<h1><a id="id14" name="id14">2.5.5.1</a></h1>
 <ul class="simple">
 <li>8-Apr-2005</li>
 </ul>
@@ -1053,7 +1024,7 @@ folks.</p>
 <p>Added the ActiveGrid IDE as a sample application.</p>
 </div>
 <div class="section">
-<h1><a id="id16" name="id16">2.5.4.1</a></h1>
+<h1><a id="id15" name="id15">2.5.4.1</a></h1>
 <ul class="simple">
 <li>16-Mar-2005</li>
 </ul>
@@ -1287,7 +1258,7 @@ wx.Image.</p>
 </dl>
 </div>
 <div class="section">
-<h1><a id="id17" name="id17">2.5.3.1</a></h1>
+<h1><a id="id16" name="id16">2.5.3.1</a></h1>
 <ul class="simple">
 <li>9-Nov-2004</li>
 </ul>
@@ -1444,7 +1415,7 @@ it.</p>
 version installs, and comes with an uninstaller script.</p>
 </div>
 <div class="section">
-<h1><a id="id18" name="id18">2.5.2.8</a></h1>
+<h1><a id="id17" name="id17">2.5.2.8</a></h1>
 <ul class="simple">
 <li>27-Aug-2004</li>
 </ul>
@@ -1476,7 +1447,7 @@ wxCheckListBox.</li>
 </blockquote>
 </div>
 <div class="section">
-<h1><a id="id19" name="id19">2.5.2.7</a></h1>
+<h1><a id="id18" name="id18">2.5.2.7</a></h1>
 <ul class="simple">
 <li>14-Aug-2004</li>
 </ul>
@@ -1660,7 +1631,7 @@ MigrationGuide for more details on using the new module.</p>
 <p>Floats are allowed again as function parameters where ints are expected.</p>
 </div>
 <div class="section">
-<h1><a id="id21" name="id21">2.4.2.4</a></h1>
+<h1><a id="id20" name="id20">2.4.2.4</a></h1>
 <ul class="simple">
 <li>1-Oct-2003</li>
 </ul>
@@ -1673,7 +1644,7 @@ demonstrated in the Threads sample in the demo.</p>
 <p>Added Chris Barker's FloatCanvas.</p>
 </div>
 <div class="section">
-<h1><a id="id22" name="id22">2.4.1.2</a></h1>
+<h1><a id="id21" name="id21">2.4.1.2</a></h1>
 <ul class="simple">
 <li>19-Jun-2003</li>
 </ul>
@@ -1728,7 +1699,7 @@ and Spacers can be specified with a wxSize (or 2-tuple) parameter</p>
 <p>Added wxCursorFromBits.</p>
 </div>
 <div class="section">
-<h1><a id="id23" name="id23">2.4.0.7</a></h1>
+<h1><a id="id22" name="id22">2.4.0.7</a></h1>
 <ul class="simple">
 <li>24-Mar-2003</li>
 </ul>
@@ -1768,7 +1739,7 @@ think I am testing in the future...</p>
 <p>Updated to 0.9b of PyCrust.</p>
 </div>
 <div class="section">
-<h1><a id="id24" name="id24">2.4.0.4</a></h1>
+<h1><a id="id23" name="id23">2.4.0.4</a></h1>
 <ul class="simple">
 <li>7-Mar-2003</li>
 </ul>
@@ -1829,7 +1800,7 @@ doesn't have a standard place for them.</p>
 <p>Updated to the 0.9a version of PyCrust</p>
 </div>
 <div class="section">
-<h1><a id="id25" name="id25">2.4.0.2</a></h1>
+<h1><a id="id24" name="id24">2.4.0.2</a></h1>
 <ul class="simple">
 <li>23-Jan-2003</li>
 </ul>
@@ -1838,7 +1809,7 @@ doesn't have a standard place for them.</p>
 <p>Added wxPyColourChooser by Michael Gilfix.</p>
 </div>
 <div class="section">
-<h1><a id="id26" name="id26">2.4.0.1</a></h1>
+<h1><a id="id25" name="id25">2.4.0.1</a></h1>
 <ul class="simple">
 <li>10-Jan-2003</li>
 </ul>
@@ -1848,14 +1819,14 @@ enhancements.</p>
 wxPython/lib/dialogs.py for more details.</p>
 </div>
 <div class="section">
-<h1><a id="id27" name="id27">2.3.4.2</a></h1>
+<h1><a id="id26" name="id26">2.3.4.2</a></h1>
 <ul class="simple">
 <li>21-Dec-2002</li>
 </ul>
 <p>Various bug fixes.</p>
 </div>
 <div class="section">
-<h1><a id="id28" name="id28">2.3.4.1</a></h1>
+<h1><a id="id27" name="id27">2.3.4.1</a></h1>
 <ul class="simple">
 <li>18-Dec-2002</li>
 </ul>
@@ -1913,7 +1884,7 @@ HTMLHelp viewer does.  Changed how the wxPythonDocs tarball is built
 and added a script to launch the doc viewer.</p>
 </div>
 <div class="section">
-<h1><a id="id29" name="id29">2.3.3.1</a></h1>
+<h1><a id="id28" name="id28">2.3.3.1</a></h1>
 <ul class="simple">
 <li>19-Sep-2002</li>
 </ul>
@@ -2059,7 +2030,7 @@ example.</p>
 <p>Added wxTimeCtrl from Will Sadkin.</p>
 </div>
 <div class="section">
-<h1><a id="id30" name="id30">2.3.2.1</a></h1>
+<h1><a id="id29" name="id29">2.3.2.1</a></h1>
 <ul class="simple">
 <li>20-Dec-2001</li>
 </ul>
@@ -2069,7 +2040,7 @@ without barfing and is also still compatible with Python debuggers.</p>
 <p>Added some patches from library contributors.</p>
 </div>
 <div class="section">
-<h1><a id="id31" name="id31">2.3.2</a></h1>
+<h1><a id="id30" name="id30">2.3.2</a></h1>
 <ul class="simple">
 <li>11-Dec-2001</li>
 </ul>
@@ -2155,7 +2126,7 @@ wxPython/contrib/dllwidget and wxPython/demo/dllwidget for more
 details.</p>
 </div>
 <div class="section">
-<h1><a id="id32" name="id32">2.3.1</a></h1>
+<h1><a id="id31" name="id31">2.3.1</a></h1>
 <ul class="simple">
 <li>10-Jul-2001</li>
 </ul>
@@ -2172,7 +2143,7 @@ subclass wxXmlResourceHandler, etc...</p>
 <p>Added enhanced wxVTKRenderWindow by Prabhu Ramachandran</p>
 </div>
 <div class="section">
-<h1><a id="id33" name="id33">2.3.0</a></h1>
+<h1><a id="id32" name="id32">2.3.0</a></h1>
 <ul class="simple">
 <li>22-May-2001</li>
 </ul>
@@ -2272,7 +2243,7 @@ by having smaller functional apps to play with.  They can be found in
 wxPython/samples.</p>
 </div>
 <div class="section">
-<h1><a id="id34" name="id34">2.2.7</a></h1>
+<h1><a id="id33" name="id33">2.2.7</a></h1>
 <ul class="simple">
 <li>19-Jun-2001</li>
 </ul>
@@ -2280,7 +2251,7 @@ wxPython/samples.</p>
 changes and fixes in the wxWindows library.</p>
 </div>
 <div class="section">
-<h1><a id="id35" name="id35">2.2.5</a></h1>
+<h1><a id="id34" name="id34">2.2.5</a></h1>
 <ul class="simple">
 <li>30-Jan-2001</li>
 </ul>
index 2c959dfad8d072bfb531cc0fb30a61bc4b271b18..fe9cdd31c9c1e7233cc2043d34b1df79fb2e42cb 100644 (file)
@@ -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
index 32f33f8a2e82efa08f8d949689223bfd53466824..6977a0500e266f55ff2a70ccccb9b790ac7b98b4 100644 (file)
@@ -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
        )
 
index d593ea6f120b25800693503956817abbe5b6c31e..bfd6f5088c640f48e7b6e15482fb81bee6b29829 100644 (file)
@@ -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",
index 0632593d0e8792339eb4ceddcf9cf24b84a178c6..553f0e1cf62567e089751e9436d69d7ba9a6c06a 100644 (file)
@@ -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);
+};
+
+
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
index 7d2ff9e7badc36ded1d15f8229bfaeabda0cee2b..87b2b5c900fbada366dd3eca3cd09ba8b4428fd8 100644 (file)
@@ -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
index 1b261790a0515a6d1c555aeb2c916796f8ceefac..90246393ddf500b5b0f106d7eff6420b6105bc0e 100644 (file)
@@ -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();
 
 
index f7e886494e5b22de7a68fa2bfc8c6e1227926e91..3180b8e5150188fe95cb56998d5d56848e08de84 100644 (file)
@@ -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);
 };
index 5c83b625f0183767fd1fe574116dfca9a31ed94f..450d476f26487c42eca1f477249f827779d978fa 100644 (file)
@@ -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 {
index a5b3ff5f0078d78ecc8807342b5494eea7e14336..1609c74f5293378388f50928b73f84224a9e19a7 100755 (executable)
@@ -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();
 
index 4b63e19d071de61d5ee54bfa421444512827cc24..2574e9edb42ed37ac15629f2043312a3cd78d245 100644 (file)
@@ -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)
index 76f35017115fe4421dbbcf9b129adff8e1f14ff1..87313192a2a68e99c36392ed7f3ca0799b7d2f6a 100644 (file)
@@ -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)
 
index ba43aab4989f1e31fda4ed14e2dc67cc998ae0bb..b6a5f82c617cb0872b57bb786816788bfd1c0bf4 100644 (file)
 # 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<x\xd0LMM\xc9\xf3<]\xbatI\xb6\
-m\xeb\xe2\xc5\x8b\x92\xa4B\xa1\xa0d2)I\xba|\xf9\xb2l\xdb\xd6\x85\x0b\x174??\
-\xaf\xe9\xe9i\xf5\xf7\xf7\x1b@\xae\xeb\xbe\x04>\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<NGG\x07\
-\xa1P\x88\xc6\xc6Fj\xb5\x1a\x96eaY\x16\xc6\x18\x82\xc1 \x91H\x84`0H\xadVcxx\
-\x98\x87\x0f\x1fZ\x95J\xe5n{{\xfb\xe5\xc5\xc5\xc5\x0c\x90\x078\xd0\xd3\xd3\
-\xf3\xdd]\xbbv}#\x12\x89\xfc\xaa\xfeP\x9a\x99\x99\xd1\xca\xca\x8a\xb2\xd9\
-\xac\xca\xe5\xb2\xbe(\x95JE\xd9lV\xd5jU\x9e\xe7)\x18\x0c\xae\xe1\xff\x0b`\
-\xa7\xe38\x1f\x02\x07\x1c\xe0J\xa1P\xf8\xd8q\x9c\x8f3\x99L_0\x18\x8c\x9c?\
-\x7f\x9ec\xc7\x8e\xd1\xd8\xd8\x88m\xdb\x14\x8bE\xc6\xc7\xc7y\xf2\xe4\t\xcf\
-\x9f?\'\x9f\xcf\x13\n\x85\xd8\xb4i\x13\xc6\x18|\x7f\x95\x8d\x13\x13\x13\x94\
-\xcb\xe5\x0e\xdb\xb6\xfb\x8c1\xfd\xc0n\x80\xe7\x80\xe2\xf1\xb8N\x9e<\xa9\xd1\
-\xd1Q_\x92\x8a\xc5\xa2r\xb9\x9c$\xe9\xe9\xd3\xa7z\xff\xfd\xf7\xd5\xd0\xd0 \
-\xdb\xb6u\xf4\xe8Q=z\xf4H\x92\x94\xcb\xe5T(\x14$I\xb7n\xdd\xf2\x07\x07\x07u\
-\xfc\xf8q\xd9\xb6\xad\xbao^tuuUFFF\x94\xcb\xe5\x94\xcf\xe7\x95L&\xd7\xf7\x92\
-t\xef\xde=544l\xe4\xban\xdf\xbe-I\xca\xe7\xf3\xca\xe7\xf3*\x14\nJ\xa7\xd3J\
-\xa5R\x1a\x1d\x1dUww\xf72\xf0\xc2e\xadg\xb8.\xbe\xefcY\x16\xc1`\xf0\xad\x02\
-\x91\xb4\x0e\x03\x801\x06c\xcc[:\xc5b\x91p8\x8ceY\xd8\xb6\x8deY\x00\x96\x03\
-\xfc\xa8T*\xbd\xb3\xb4\xb4\xc4\xe3\xc7\x8fYZZ2\x87\x0f\x1f\xb6|\xdf\xc7\x18C\
- \x10 \x9f\xcf\xf3\xea\xd5+fgg\x91\xc4\x91#G\x18\x1a\x1a"\x1a\x8d\xb2\xbc\
-\xbc\x8cm\xdbl\xde\xbc\x99\xfb\xf7\xef\x9b\x91\x91\x11\xeb\xd9\xb3g\x8c\x8f\
-\x8f;@\xca\x02\xae\x00\xbd\xb6m7\x19cvttt\xc4\xce\x9c9\xc3\xb9s\xe7\x08\x87\
-\xc3\x00\x14\n\x05&\'\'\x99\x9e\x9e\xc6\x18\xc3\x8e\x1d;\xd8\xbbw/\xe1p\x18I\
-T*\x15FFF\x18\x1e\x1e&\x97\xcb\xcduvv\xcef2\x99\x95j\xb5\xfa\x02\xa0\xc3q\
-\x9c\xe3\xf5\xc2\xf8\xf9\xffK\xd3\xe6\xe6f\x01\n\x87\xc3\xb7zzz\xfa\xf6\xec\
-\xd9\xf3}\xe0=\x07(I\xaa\xc5b\xb1`6\x9b=\x1a\x89D\xde;{\xf6,\x03\x03\x03\x04\
-\x83A\\\xd7\xc5\x18C\xa5R\xa1Z\xadR\xadV\xd7a\t\x04\x02\x00,//S\xab\xd5X\\\\\
-\xa4T*M\xce\xcd\xcd\xfdqaa\xe1_\xc0\xcb\xb57\xda\xb5\xb1U\xcc\xcf\xcf+\x91H\
-\xc8\xf3<y\x9e\xa7\x85\x85\x05\x15\n\x85\xb7\x18\x93\xc9d\xe4y\x9e\xd2\xe9\
-\xb4\x12\x89\x84\xd2\xe9\xb4\xe2\xf1\xb8\x00\xc5b\xb1g\xc0>\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\x1e<X>p\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)
-
-#---------------------------------------------------------------------------
index 2ca5ec9061500f743d2573506c366bb9edacbb45..904c1b01fb90e2be6b508bbec492f884db143ad0 100644 (file)
@@ -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))
                         
index 446249efe54126f073958eadc4cbabc1ee7be355..04d74c1fc70adda2d7c966aad952a1356dd58ad7 100644 (file)
@@ -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